根据多列中对应的值删除所有行

问题描述 投票: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)

我想根据以下条件创建一个新的数据框。如果数字为1,则删除所有具有相应id值的行。 所需输出:

id        number
12        2
13        2
13        3

看起来/听起来并不那么困难,但不幸的是我还无法弄清楚。有什么建议吗?

r dataframe subset delete-row
2个回答
4
投票

带有

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


3
投票

首先,确保您的数字列是

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)
© www.soinside.com 2019 - 2024. All rights reserved.