从分组数据中选择第一行和最后一行


使用dplyr,如何在一个语句中选择分组数据的顶部和底部观察/行?


数据与示例


给定数据框


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

我可以将这两个statmenets合并成一个选择两个顶部和底部的意见?


四季花海
浏览 1005回答 3
3回答

慕沐林林

可能有一种更快的方法:df %>%&nbsp; group_by(id) %>%&nbsp; arrange(stopSequence) %>%&nbsp; filter(row_number()==1 | row_number()==n())

忽然笑

仅出于完整性考虑:您可以传递slice索引向量:df %>% arrange(stopSequence) %>% group_by(id) %>% slice(c(1,n()))这使&nbsp; id stopId stopSequence1&nbsp; 1&nbsp; &nbsp; &nbsp; a&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 12&nbsp; 1&nbsp; &nbsp; &nbsp; c&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 33&nbsp; 2&nbsp; &nbsp; &nbsp; b&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 14&nbsp; 2&nbsp; &nbsp; &nbsp; c&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 45&nbsp; 3&nbsp; &nbsp; &nbsp; b&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 16&nbsp; 3&nbsp; &nbsp; &nbsp; a&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 3
打开App,查看更多内容
随时随地看视频慕课网APP