Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有数据框
df1 = data.frame(Site=c(rep("A",5),rep("B",7)),Species=sample(1:100, size=12))
并希望过滤数据框,以便只返回每个站点的前 3 行。IE。返回数据框
df2=data.frame(Site=c(rep("A",3),rep("B",3)),Species=c(3,84,45,38,39,22))
有任何想法吗?谢谢
也许是这样的:
do.call("rbind", lapply(split(df1, df1$Site), function(x) x[1:3,]))
您可以使用以下方法轻松选择前三行ddply:
ddply
library(plyr) ddply(df1, "Site", function(df) df[1:min(nrow(df), 3),])
使用min(nrow(df), 3)意味着如果站点只出现两次,我们不会尝试选择三行。
min(nrow(df), 3)