为r中的列中的每个级别返回n行

时间:2012-07-12 12:04:28

标签: r dataframe

我有数据框

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))

有什么想法吗?感谢

2 个答案:

答案 0 :(得分:4)

也许是这样的:

do.call("rbind", lapply(split(df1, df1$Site), function(x) x[1:3,]))

答案 1 :(得分:1)

您可以使用ddply轻松选择前三行:

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

使用min(nrow(df), 3)表示如果网站只显示两次,我们就不会尝试选择三行。