0

我有一个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

我想为每个随机行(随机 ID2)ID3,所以我可以有一个像这样的新数据库:

> mydata2
ID ID2 ID3 X1 X2
1   3    1
2   2    2
3   3    3
4   1    4

我可以这样做sqldf吗?还是其他代码?

4

2 回答 2

2

使用 sqldf:

library(sqldf)
sqldf("select max(random(*)) r, * from mydata group by ID3")
于 2014-03-31T16:13:45.743 回答
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),]))
于 2014-03-31T16:28:40.077 回答