我发现了这个: Remove subsequent rows of a group after first occurence of 0 in a column

还有这个: Remove rows after first occurrence of a certain value

但这并不完全是我想要的.下面是一段重述:

df <- data.frame(
  id = c(1001, 1001, 1002, 1002, 1002, 1005, 1005, 1005, 1005, 1005),
  name = c("monkey", "gorilla", "chimp", "monkey", "giraffe", "tarzan", "whale", "princess", "phone", "kindle"),
  char = c(0, 1, 0, 1, 0, 0, 0, 1, 0, 0))
df
#>      id     name char
#> 1  1001   monkey    0
#> 2  1001  gorilla    1
#> 3  1002    chimp    0
#> 4  1002   monkey    1
#> 5  1002  giraffe    0
#> 6  1005   tarzan    0
#> 7  1005    whale    0
#> 8  1005 princess    1
#> 9  1005    phone    0
#> 10 1005   kindle    0

df_desired <- data.frame(
  id = c(1001, 1002, 1005, 1005),
  name = c("monkey", "chimp", "tarzan", "whale"),
  char = c(0, 0, 0, 0))
df_desired
#>     id     name char
#> 1 1001   monkey    0
#> 3 1002    chimp    0
#> 6 1005   tarzan    0
#> 7 1005    whale    0

reprex package(v2.0.1)于2022-08-10创建

当按id分组并按名称排列时,我正在try 删除char达到1之后的行及其后续行.

推荐答案

感谢您在问题@taimishu中更新详细信息;如果我理解正确,以下是一个潜在的解决方案:

library(tidyverse)
df <- data.frame(
  id = c(1001, 1001, 1002, 1002, 1002, 1005, 1005, 1005, 1005, 1005),
  name = c("monkey", "gorilla", "chimp", "monkey", "giraffe", "tarzan", "whale", "princess", "phone", "kindle"),
  char = c(0, 1, 0, 1, 0, 0, 0, 1, 0, 0))
df
#>      id     name char
#> 1  1001   monkey    0
#> 2  1001  gorilla    1
#> 3  1002    chimp    0
#> 4  1002   monkey    1
#> 5  1002  giraffe    0
#> 6  1005   tarzan    0
#> 7  1005    whale    0
#> 8  1005 princess    1
#> 9  1005    phone    0
#> 10 1005   kindle    0

df_desired <- data.frame(
  id = c(1001, 1002, 1005, 1005),
  name = c("monkey", "chimp", "tarzan", "whale"),
  char = c(0, 0, 0, 0))
df_desired
#>     id   name char
#> 1 1001 monkey    0
#> 2 1002  chimp    0
#> 3 1005 tarzan    0
#> 4 1005  whale    0

df_filtered <- df %>%
  group_by(id) %>%
  filter(cummax(char) < 1)
df_filtered
#> # A tibble: 4 × 3
#> # Groups:   id [3]
#>      id name    char
#>   <dbl> <chr>  <dbl>
#> 1  1001 monkey     0
#> 2  1002 chimp      0
#> 3  1005 tarzan     0
#> 4  1005 whale      0

all_equal(df_desired, df_filtered)
#> [1] TRUE

reprex package(v2.0.1)于2022-08-10创建

R相关问答推荐

使用tidyverse方法绑定行并从一组管道列表执行左连接

如何根据组大小应用条件过滤?

我不能在docker中加载sf

提取具有连续零值的行,如果它们前面有R中的有效值

在使用tidyModels和XGBoost的二进制分类机器学习任务中,所有模型都失败

使用rvest从多个页面抓取时避免404错误

ComplexHEAT:使用COLUMN_SPLIT时忽略COLUMN_ORDER

当我们有多个反斜杠和/特殊字符时使用Gsubing

使用RSelenium在R中抓取Reddit时捕获多个标签

从多个可选列中选取一个值到一个新列中

将项粘贴到向量中,并将它们分组为x的倍数,用空格分隔

使用R将简单的JSON解析为嵌套框架

将具有坐标列表列的三角形转换为多个多边形

在ggplot2上从多个数据框创建复杂的自定义图形

R基于变量组合创建新的指标列

按组和连续id计算日期差

快速合并R内的值

长/纬点继续在堪萨斯-SF结束,整齐的人口普查

有没有办法更改ggplot2中第二个y轴的比例限制?

如何将两个用不同的运算符替换*的矩阵相乘