我想根据我在这里无法看到/找到的条件对新数据框进行子集/过滤。 (基于多个条件的子数据框)
id <- c('10','10','10','11', '11', '12', '13', '13', '14', '15', '15')
number <- c('1', '2','3', '1', '2', '2', '2', '3','1' ,'1','2')
df <- data.frame(id, number)
我想根据以下条件创建一个新的数据框。如果数字为1,则删除所有具有相应id值的行。 所需输出:
id number
12 2
13 2
13 3
看起来/听起来并不那么困难,但不幸的是我还无法弄清楚。有什么建议吗?
带有
subset
+ ave
的基本选项
> subset(df, ave(number == 1, id) == 0)
id number
6 12 2
7 13 2
8 13 3
如果您未指定
ave
中使用的函数,默认情况下 ave
将计算第一个参数的平均值(由以下参数分组)。在您的情况下,如果 1
列中没有 number
,则平均值应为 0
。
首先,确保您的数字列是
numeric
。之后,您可以根据您的条件按 group_by
和 filter
如果 all
数字为真:
library(dplyr)
df %>%
group_by(id) %>%
filter(all(number > 1))
#> # A tibble: 3 × 2
#> # Groups: id [2]
#> id number
#> <chr> <dbl>
#> 1 12 2
#> 2 13 2
#> 3 13 3
创建于 2023-08-16,使用 reprex v2.0.2
使用数据:
id <- c('10','10','10','11', '11', '12', '13', '13', '14', '15', '15')
number <- c(1, 2,3, 1, 2, 2, 2, 3,1 ,1,2)
df <- data.frame(id, number)