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

すなわち

randomRows(df,1)

しかし、「名前」ごとに(または同じである「id」ごとに)1つの行をランダムに選択し、その行全体を新しいテーブルに連結したいので、この場合は3つの行です。これは、2000行以上のデータフレームをループする必要があります。どうやって見せてください!

4

2 に答える 2

2

ベースRでそれを行う1つの方法を次に示します。

> 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 に答える
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 に答える