【问题标题】:Remove rows below certain row number/condition by group按组删除低于特定行号/条件的行
【发布时间】:2019-01-12 17:43:10
【问题描述】:

我正在尝试对 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]), ]
}

【问题讨论】:

    标签: r dplyr subset


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-18
      • 2022-01-23
      • 2019-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      相关资源
      最近更新 更多