Удалить последние элементы столбца с нумерацией - PullRequest
0 голосов
/ 22 февраля 2019

В моем информационном кадре есть столбец с последовательными нумерациями, варьирующимися от 1 до 20 элементов (здесь 1-4):

df <-
numbering col_2 col_3
 1         h     t
 2         t     h
 3         h     t
 1         t     t
 2         h     t
 1         f     h
 2         h     h
 3         h     t
 4         h     h
 1         h     t 

Мне нужно удалить каждую последнюю строку последовательной нумерации, чтобы получить

numbering col_2 col_3
 1         h     t
 2         t     h
 1         t     t
 1         f     h
 2         h     h
 3         h     t
 1         h     t

Тх

1 Ответ

0 голосов
/ 22 февраля 2019

Мы можем создать переменную группирования на основе вхождения 1, затем slice, чтобы удалить последнюю строку и сохранить ее, если есть только одна строка

library(dplyr)
df %>% 
  group_by(grp = cumsum(numbering == 1)) %>% 
  slice(if(n() == 1) 1 else -n())

Или использовать group_map для фильтрации строк

df %>% 
   group_by(grp = cumsum(numbering == 1)) %>% 
   group_map(~ if(nrow(.x) ==1) .x else head(.x,-1L)) %>%
   ungroup %>%
   select(-grp)

data

df <- structure(list(numbering = c(1L, 2L, 3L, 1L, 2L, 1L, 2L, 3L, 
   4L, 1L), col_2 = c("h", "t", "h", "t", "h", "f", "h", "h", "h", 
 "h"), col_3 = c("t", "h", "t", "t", "t", "h", "h", "t", "h", 
 "t")), class = "data.frame", row.names = c(NA, -10L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...