按组删除某些行号/条件以下的行

时间:2019-01-12 17:43:10

标签: r dplyr subset

我正在尝试在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 :(得分:2)

您可以使用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