R - как условно удалить первую строку group_by - PullRequest
0 голосов
/ 11 июня 2018

Мне нужно условно удалить первый ряд группы.Я хочу сгруппировать по столбцу gr, а затем удалить первую строку каждой группы, только если первая строка группы имеет значение

например,

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, он все еще довольно сложен для меня, и я нигде не могу найти ответ на эту проблему.

Большое спасибо!

1 Ответ

0 голосов
/ 11 июня 2018

Примените ваши условия в пределах 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)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...