2014-03-31 34 views
0

我有一個data.frame這樣的:我可以使用sqldf選擇一個基於子ID的隨機行嗎?

> 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中這樣做?或其他代碼?

回答

2

隨着sqldf:

library(sqldf) 
sqldf("select max(random(*)) r, * from mydata group by ID3") 
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),])) 
相關問題