我有这个数据框
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
此函数从中选择一个随机行:
randomRows = function(df,n){
return(df[sample(nrow(df),n),])
}
即。
randomRows(df,1)
但我想随机选择每个'name'一行(或每个'id'是相同的)并将整行连接成一个新表,所以在这种情况下,三行。这必须遍历2000多行数据帧。请告诉我怎么样?!
答案 0 :(得分:2)
我认为您可以使用plyr
包执行此操作:
library("plyr")
ddply(df,.(name),randomRows,1)
,例如:
id name value
1 1 A 8
2 2 B 11
3 3 C 12
这是你在找什么?
答案 1 :(得分:2)
这是在基地R中进行此操作的一种方法。
> 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