我有data.frame
这样:
> mydata
ID ID2 ID3 X1 X2
1 1 1
2 2 1
3 3 1
4 1 2
5 2 2
6 1 3
7 2 3
8 3 3
9 4 3
10 1 4
11 2 4
我想为每个ID3
取一个随机行(随机ID2),所以我可以有一个像这样的新数据库:
> mydata2
ID ID2 ID3 X1 X2
1 3 1
2 2 2
3 3 3
4 1 4
我可以在sqldf
中执行此操作吗?还是其他代码?
答案 0 :(得分:2)
使用sqldf:
library(sqldf)
sqldf("select max(random(*)) r, * from mydata group by ID3")
答案 1 :(得分:0)
"或其他代码",使用apply
:
#dummy data
df <- read.table(text="ID ID2 ID3
1 1 1
2 2 1
3 3 1
4 1 2
5 2 2
6 1 3
7 2 3
8 3 3
9 4 3
10 1 4
11 2 4",header=TRUE)
#using lapply
do.call(rbind,
lapply(split.data.frame(df,df$ID3),
function(d) d[sample(1:nrow(d),1),]))