数据集中每个组的不同样本数
Different sample number for each group in a data set
给定一个数据集
key <- rep(c('a', 'b', 'c'), 10)
value <- sample(30)
df <- data.frame(key, value)
我想在键中为每个组使用不同数量的样本,使用 dplyr 的简单代码显然不适用于此任务是
ns <- c('a'= 1, 'b'= 2, 'c' = 3)
df %>%
mutate(n_s = ns[key]) %>%
group_by(key) %>%
sample_n(n_s)
有一些看起来这么简单的解决方案吗?
您可以使用 mapply
和 split(df, df$key)
和 ns
作为参数,但请注意 ns
的名称未被使用。重要的是组的顺序,如果组的数量与ns的长度不匹配,ns将被回收。
set.seed(129)
mapply(sample_n, split(df, df$key), ns, SIMPLIFY = FALSE) %>%
rbind_all
# key value
# (fctr) (int)
#1 a 29
#2 b 14
#3 b 22
#4 c 10
#5 c 24
#6 c 3
您可以查看我的 "splitstackshape" 包中的 stratified
函数:
library(splitstackshape)
ns <- c('a'= 1, 'b'= 2, 'c' = 3)
stratified(df, "key", size = ns)
# key value
# 1: a 7
# 2: b 10
# 3: b 13
# 4: c 4
# 5: c 20
# 6: c 9
给定一个数据集
key <- rep(c('a', 'b', 'c'), 10)
value <- sample(30)
df <- data.frame(key, value)
我想在键中为每个组使用不同数量的样本,使用 dplyr 的简单代码显然不适用于此任务是
ns <- c('a'= 1, 'b'= 2, 'c' = 3)
df %>%
mutate(n_s = ns[key]) %>%
group_by(key) %>%
sample_n(n_s)
有一些看起来这么简单的解决方案吗?
您可以使用 mapply
和 split(df, df$key)
和 ns
作为参数,但请注意 ns
的名称未被使用。重要的是组的顺序,如果组的数量与ns的长度不匹配,ns将被回收。
set.seed(129)
mapply(sample_n, split(df, df$key), ns, SIMPLIFY = FALSE) %>%
rbind_all
# key value
# (fctr) (int)
#1 a 29
#2 b 14
#3 b 22
#4 c 10
#5 c 24
#6 c 3
您可以查看我的 "splitstackshape" 包中的 stratified
函数:
library(splitstackshape)
ns <- c('a'= 1, 'b'= 2, 'c' = 3)
stratified(df, "key", size = ns)
# key value
# 1: a 7
# 2: b 10
# 3: b 13
# 4: c 4
# 5: c 20
# 6: c 9