Question
使用 dplyr
,如何在一个语句中选择分组数据的顶部和底部观察/行?
Data & Example
给定一个数据框架
df <- data.frame(id=c(1,1,1,2,2,2,3,3,3),
stopId=c("a","b","c","a","b","c","a","b","c"),
stopSequence=c(1,2,3,3,1,4,3,1,2))
我可以使用 slice
从每个组中获取顶部和底部观察结果,但使用两个单独的参数:
firstStop <- df %>%
group_by(id) %>%
arrange(stopSequence) %>%
slice(1) %>%
ungroup
lastStop <- df %>%
group_by(id) %>%
arrange(stopSequence) %>%
slice(n()) %>%
ungroup
我可以将这两个statmenet组合成一个选择顶部和底部观察的平台吗?
6 回答
就像是:
使用
do
,您几乎可以对该组执行任意数量的操作,但@ jeremycg的答案更适合此任务 .可能有更快的方法:
只是为了完整性:您可以传递
slice
索引向量:这使
不
dplyr
,但使用data.table
更直接:更详细的解释:
请务必查看Getting Started wiki以获取
data.table
基础知识我知道指定的问题
dplyr
. 但是,由于其他人已经使用其他软件包发布了解决方案,我也决定使用其他软件包:基础包:
data.table:
sqldf:
在一个查询中:
输出:
在2018年使用
data.table
: