0
说我有一个数据帧如下:如何随机选择只有一行每组
df <- data.frame(Region = c("A","A","A","B","B","C","D","D","D","D"),
Combo = c(1,2,3,1,2,1,1,2,3,4))
> df
Region Combo
1 A 1
2 A 2
3 A 3
4 B 1
5 B 2
6 C 1
7 D 1
8 D 2
9 D 3
10 D 4
我想这样做,是为每个区域(A,B,C,d)随机选择只有一个该地区的可能组合。
如果选择的组合是由一个二元变量表示,它会看起来可能是这样的:
Region Combo RandomlyChosen
1 A 1 1
2 A 2 0
3 A 3 0
4 B 1 0
5 B 2 1
6 C 1 1
7 D 1 0
8 D 2 0
9 D 3 1
10 D 4 0
我知道样品的功能,但就是不知道该如何选择只有一个组合在每个地区。
我正在使用data.table,所以使用它的任何解决方案都是受欢迎的。虽然不使用data.table的解决方案同样受欢迎。
谢谢!
'DF [,兰德单个行数:= .I == sample(as.character(.I),1),by = Region]'也许是一个data.table解决方案。虽然我怀疑可能有更好的做法, – thelatemail
使用base R:'sapply(split(df $ Combo,df $ Region),function(z)z [sample(1:length(z),1)])' – Raad
@NBATrends返回指定的数字,而不是数据框。为此,你需要像'do.call(rbind,lapply(split(df,df $ Region),function(x){x [sample(seq_along(x $ Combo),1),]}))''' – alistaire