我需要有条件地删除组的第一行。 我想按列gr进行分组,然后仅当组的第一行具有值a时才删除每个组的第一行
e.g。
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
会变成:
gr value
1 b
1 c
1 a
2 d
3 b
3 a
3 h
3 a
4 a
4 g
我知道如何删除第一行组:
library(dplyr)
df <- df %>% group_by(a) %>% slice(2:n()) %>% ungroup()
但是我不知道如何在第一行中添加条件,df $ value = a
我是R的新手,对我来说仍然相当复杂,我无法在任何地方找到这个问题的答案。
非常感谢!
答案 0 :(得分:7)
在filter
声明
library(dplyr)
df %>%
group_by(gr) %>%
filter(!(value == 'a' & row_number() == 1))
示例数据:
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))
更新:或@akrun建议
library(dplyr)
df %>%
group_by(gr) %>%
slice(which(!(value == 'a' & row_number() == 1)))