0

私はデータフレームを持っています

df1 = data.frame(Site=c(rep("A",5),rep("B",7)),Species=sample(1:100, size=12))

各サイトの最初の 3 行のみが返されるように、データフレームをフィルタリングします。すなわち。データフレームを返す

df2=data.frame(Site=c(rep("A",3),rep("B",3)),Species=c(3,84,45,38,39,22))

何か案は?ありがとう

4

2 に答える 2

4

多分このようなもの:

do.call("rbind", lapply(split(df1, df1$Site), function(x) x[1:3,]))
于 2012-07-12T12:16:39.027 に答える
1

を使用して、最初の 3 行を簡単に選択できますddply

library(plyr)
ddply(df1, "Site", function(df) df[1:min(nrow(df), 3),])

を使用min(nrow(df), 3)すると、サイトが 2 回しか表示されない場合、3 つの行を選択しようとはしません。

于 2012-07-12T12:15:59.980 に答える