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