R-如何有条件地删除group_by的第一行

Isj*_*tar 5 r dplyr

我需要有条件地删除组的第一行.我想按列gr进行分组,然后仅当组的第一行具有值a时才删除每个组的第一行

例如

gr  value
1   b
1   c
1   a
2   a
2   d
3   b
3   a
3   h
3   a
4   a
4   a
4   g
Run Code Online (Sandbox Code Playgroud)

会成为:

gr  value
1   b
1   c
1   a
2   d
3   b
3   a
3   h
3   a
4   a
4   g
Run Code Online (Sandbox Code Playgroud)

我知道如何删除第一行组:

library(dplyr)
df <- df %>% group_by(a) %>% slice(2:n()) %>% ungroup()
Run Code Online (Sandbox Code Playgroud)

但我不知道如何添加条件只在第一行df $ value = a时执行此操作

我是R的新手,对我来说仍然相当复杂,我无法在任何地方找到这个问题的答案.

非常感谢你!

Pre*_*rem 9

filter声明中应用您的条件

library(dplyr)

df %>%
  group_by(gr) %>%
  filter(!(value == 'a' & row_number() == 1))
Run Code Online (Sandbox Code Playgroud)


样本数据:

df <- structure(list(gr = c(1L, 1L, 1L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 
4L, 4L), value = c("b", "c", "a", "a", "d", "b", "a", "h", "a", 
"a", "a", "g")), .Names = c("gr", "value"), class = "data.frame", row.names = c(NA, 
-12L))
Run Code Online (Sandbox Code Playgroud)

更新:或@akrun建议

library(dplyr)

df %>% 
  group_by(gr) %>% 
  slice(which(!(value == 'a' & row_number() == 1)))
Run Code Online (Sandbox Code Playgroud)

  • 或者使用`slice``df%>%group_by(gr)%>%slice(其中(!(value =='a'&row_number()== 1))) (3认同)