【发布时间】:2016-02-23 06:46:46
【问题描述】:
我对 R 比较陌生,如果这是一个愚蠢/明显的问题,我深表歉意!我有兴趣创建一个新数据集,该数据集由从更大的数据集中重新采样并替换的行集合组成。
我拥有的数据集看起来像这样,每个分组变量多行。
> df <- data.frame(value=c(1:5,1:4,1:3),ID=c(rep(1,5),rep(2,4),rep(3,3)))
> df
value ID
1 1 1
2 2 1
3 3 1
4 4 1
5 5 1
6 1 2
7 2 2
8 3 2
9 4 2
10 1 3
11 2 3
12 3 3
我想做的是创建一个基于分组变量重新采样(带替换)的新数据集。所以重新采样的数据集可能看起来像这样:
value ID
1 1 1
2 2 1
3 3 1
4 4 1
5 5 1
6 1 3
7 2 3
8 3 3
9 1 1
10 2 1
11 3 1
12 4 1
13 5 1
感谢您的任何建议!
【问题讨论】:
-
你需要
df[sample(nrow(df)), ]吗? -
@RonakShah,感谢您的建议。我需要它在对给定 ID 进行采样时获取所有行(即,对行块进行采样)。
-
如果我理解你的问题,使用库
dplyr和分组,你可以尝试这样的事情:df %>% group_by(ID) %>% slice(sample(n(), 3, replace = TRUE))。这适用于固定数量的采样。否则,你需要用rbind写一个循环。 -
谢谢,@Gopala。如示例中所示,行数确实因分组 ID 而异。关于 rbind 循环可能是什么样子的任何提示?
-
见下文....三种不同的解决方案来实现我希望是您想要的结果。
标签: r random-sample