删除/删除每组 R 中的最后/第一行

use*_*890 3 group-by r

这是我的数据框:

categ <- c('a','a','a','b','b')
value <- c(1,2,5,4,5)
df <- data.frame(categ, value)
Run Code Online (Sandbox Code Playgroud)

我想按categ列分组并删除每组中的第一个/最后一个元素。理想情况下,我想创建一个列,指示每个组中的第一个/最后一个元素。这是我尝试过的,但没有奏效:

library('plyr')
ddply(df, .(categ), function(x) x[-nrow(x)])
Run Code Online (Sandbox Code Playgroud)

PS 这可能是重复的问题,但我是 R 的新手,R 非常神秘,所以我无法立即移植解决方案。

Tam*_*agy 13

有一个更简单的解决方案,使用 {dplyr} 删除每组的第一行:

library(dplyr)    
df %>% 
       group_by(categ) %>% 
       slice(2:n())
Run Code Online (Sandbox Code Playgroud)

删除每组的最后一行:

df %>% 
    group_by(categ) %>% 
    slice(1:(n()-1))
Run Code Online (Sandbox Code Playgroud)


小智 2

您可以改用 dplyr 包。以下代码删除每组的最后一个元素。

    图书馆(dplyr)
    df%>%
      dplyr::group_by(类别) %>%
      dplyr::mutate(等级 = 1:长度(值)) %>%
      dplyr::filter(等级 < 最大(等级)) %>%
      dplyr::mutate(等级 = NULL)