6

我有这个数据框

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),])
}

IE

randomRows(df,1)

但是我想为每个“名称”(或每个相同的“id”)随机选择一行,并将整行连接到一个新表中,因此在这种情况下为三行。这必须遍历 2000 多行数据框。请告诉我怎么做?!

4

2 回答 2

2

我认为你可以用这个plyr包做到这一点:

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

例如:

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

这是你想要的?

于 2012-04-04T11:40:11.380 回答
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
于 2012-04-04T12:16:11.963 回答