我有一个数据框架(d
),由55个变量的640个观测值组成。
我想在64个子数据帧的10个子数据帧中随机抽样这个数据帧55个变量的观测值。我不想看到任何观察结果多于一个子数据帧
此代码适用于一个示例
d1 <- d[sample(nrow(d),64,replace=F),]
如何重复十次?
这个给我一个包含10个变量的数据帧(每个变量是一个样本…)
d1 <- replicate(10,sample(nrow(d),64,replace = F))}
有人能帮我吗?
这是一个以data.frames列表的形式返回结果的解决方案:
d <- data.frame(A=1:640, B=sample(LETTERS, 640, replace=TRUE)) # an exemplary data.frame
idx <- sample(rep(1:10, length.out=nrow(d)))
res <- split(d, idx)
res[[1]] # first data frame
res[[10]] # last data frame
唯一棘手的部分是创建idx
。idx[i]
标识生成的数据帧,idx[i]
在{1,…,10},其中将出现d
的i
行。这样的方法保证我们不会将任何一行放入超过1个data.frame中。
同样,请注意sample
返回(1,2,…,10,1,2,…,10)的随机排列。
另一种方法是:
apply(matrix(sample(nrow(d)), ncol=10), 2, function(idx) d[idx,])