假设我在R中有一个矩阵,如下所示:
ID Value
1 10
2 5
2 8
3 15
4 7
4 9
...
Run Code Online (Sandbox Code Playgroud)
我需要的是一个随机样本,其中每个元素只表示一次.
这意味着将选择ID 1,将选择ID为2的两行之一,将选择ID 3,ID为4的两行之一,等等...
可以有两个以上的重复项.
我试图在没有子集和采样子集的情况下找出最常用的R-esque方法?
谢谢!
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
Run Code Online (Sandbox Code Playgroud)
如果你的数据真的是a matrix而不是a data.frame,你也可以解决这个问题:
dat[tapply(as.character(seq(nrow(dat))),dat$ID,FUN=sample,1),]
Run Code Online (Sandbox Code Playgroud)
不要试图删除as.character,因为sample当只有一个值传递给它时会产生意想不到的结果.例如
replicate(10, sample(4,1) )
#[1] 1 1 4 2 1 2 2 2 3 4
Run Code Online (Sandbox Code Playgroud)