Удалить строки ниже определенного номера строки / условия по группе - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь установить подкадр данных в R. Он содержит несколько категорий. Первые несколько строк для каждой категории должны быть удалены. Количество удаляемых строк не согласовано, но есть строка, которая указывает на отсечение. Как мне удалить все, что находится выше среза (включая этот ряд) для каждой группы?

Пример данных:

category <- c(rep("A", 3), rep("B", 5), rep("C", 4))
info <- as.character(c("Junk", "Border", "Useful", 
    "This", "is", "Useless", "Border", "Yes please", 
    "Unwanted", "Row", "Border", "Required"))
example_df <- data.frame(category, info)
example_df$row_number <- 1:nrow(example_df)

Я могу извлечь номера строк границы и начала каждой группы:

border_rows <- which(example_df$info == "Border")
start_rows <- example_df %>%
  group_by(category) %>%
  slice(1)
start_rows <- start_rows$row_number

Я попробовал следующее, но это удаляет только первые две строки (то есть те, которые должны быть удалены для группы A).

for(i in 1:length(border_rows)) {
  new_df <- example_df[-(start_rows[i]:border_rows[i]), ]
}

1 Ответ

0 голосов
/ 12 января 2019

Вы можете легко сделать это с пакетом dplyr -

library(dplyr)

example_df %>% 
  group_by(category) %>% 
  filter(row_number() > which(info == "Border")) %>% 
  ungroup()

# A tibble: 3 x 2
  category info      
  <fct>    <fct>     
1 A        Useful    
2 B        Yes please
3 C        Required
...