假设我在R中有一个矩阵,如下所示:
ID Value
1 10
2 5
2 8
3 15
4 7
4 9
...
我需要的是一个随机样本,其中每个元素仅代表一次。
这意味着将选择ID 1,将选择ID 2的两行之一,ID 3,将选择ID 4的两行之一,等等...
可以有两个以上重复项。
我正在尝试找出最R风格的方法来执行此操作,而无需对子集进行子集和采样?
谢谢!
tapply
横跨rownames
和抢sample
的1
每个在ID
组:
dat[tapply(rownames(dat),dat$ID,FUN=sample,1),]
# ID Value
#1 1 10
#3 2 8
#4 3 15
#6 4 9
如果您的数据确实是amatrix
而不是a data.frame
,那么您也可以使用以下方法解决此问题:
dat[tapply(as.character(seq(nrow(dat))),dat$ID,FUN=sample,1),]
不要试图删除as.character
,因为sample
只有一个值传递给时,它会带来意想不到的结果。例如
replicate(10, sample(4,1) )
#[1] 1 1 4 2 1 2 2 2 3 4
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句