我可以使用sqldf根据子ID选择随机行吗?

时间:2014-03-31 15:51:23

标签: r sqldf

我有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中执行此操作吗?还是其他代码?

2 个答案:

答案 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),]))