2012-04-04 78 views
6

Tôi có dataframe nàyngẫu nhiên lựa chọn hàng trong R

id <- c(1,1,1,2,2,3) 
name <- c("A","A","A","B","B","C") 
value <- c(7:12) 
df<- data.frame(id=id, name=name, value=value) 
df 

Chức năng này chọn một hàng ngẫu nhiên từ nó:

randomRows = function(df,n){ 
    return(df[sample(nrow(df),n),]) 
} 

tức

randomRows(df,1) 

Nhưng tôi muốn chọn ngẫu nhiên một hàng cho mỗi 'tên' (hoặc mỗi 'id' là như nhau) và nối toàn bộ hàng đó vào một bảng mới, vì vậy trong trường hợp này, ba hàng. Điều này phải lặp qua một khung dữ liệu hàng 2000+. Làm ơn chỉ cho tôi cách nào ?!

Trả lời

2

Tôi nghĩ bạn có thể làm điều này với gói plyr:

library("plyr") 
ddply(df,.(name),randomRows,1) 

mang đến cho bạn ví dụ:

id name value 
1 1 A  8 
2 2 B 11 
3 3 C 12 

Đây có phải là những gì bạn đang tìm kiếm?

+0

người đàn ông tốt của tôi mà không một cách chính xác những gì tôi đang tìm kiếm! Chức năng rất gọn gàng. Cảm ơn bạn! – Bernard

+0

Bạn được chào đón. Bạn có thể chấp nhận câu trả lời để những người khác biết câu hỏi đã được trả lời không? –

2

Dưới đây là một cách để làm việc đó trong R. cơ sở

> df.split <- split(df, df$name) 
> df.sample <- lapply(df.split, randomRows, 1) 
> df.final <- do.call("rbind", df.sample) 
> df.final 
    id name value 
A 1 A  7 
B 2 B 11 
C 3 C 12 
Các vấn đề liên quan