r - 根据组的特定成员过滤组的所有行

标签 r

<分区>

我想根据指定行的值过滤整个组

在下面的数据中,我想根据 Metric 值删除组 ID所有行小时 == '2'。 (请注意,我不是在这里尝试根据两个条件进行过滤,我试图根据一个条件但在特定行进行过滤)

示例数据:

ID <- c('A','A','A','A','A','B','B','B','B','C','C')
Hour <- c('0','2','5','6','9','0','2','5','6','0','2')
Metric <- c(3,4,1,6,7,8,8,3,6,1,1)

x <- data.frame(ID, Hour, Metric)

   ID Hour Metric
1   A    0      3
2   A    2      4
3   A    5      1
4   A    6      6
5   A    9      7
6   B    0      8
7   B    2      8
8   B    5      3
9   B    6      6
10  C    0      1
11  C    2      1

我想根据 Hour == '2'Metric > 5 来过滤每个 ID。结果应如下所示(ID B 的所有行都已删除):

       ID Hour Metric
    1   A    0      3
    2   A    2      4
    3   A    5      1
    4   A    6      6
    5   A    9      7
    10  C    0      1
    11  C    2      1

首选基于 dplyr 的解决方案,但非常感谢任何帮助。

最佳答案

适应How to filter (with dplyr) for all values of a group if variable limit is reached?

我们得到:

x %>%
    group_by(ID) %>%
    filter(any(Metric[Hour == '2'] <= 5))

# # A tibble: 7 x 3
# # Groups:   ID [2]
# ID   Hour Metric
# <fctr> <fctr>  <dbl>
#     1      A      0      3
# 2      A      2      4
# 3      A      5      1
# 4      A      6      6
# 5      A      9      7
# 6      C      0      1
# 7      C      2      1

这些类型的问题也可以通过首先创建一个按组的中间变量来解决,以标记是否应删除行。

方法一:

x %>%
    group_by(ID) %>%
    mutate(keep_group = (any(Metric[Hour == '2'] <= 5))) %>%
    ungroup %>%
    filter(keep_group) %>%
    select(-keep_group)

方法二:

groups_to_keep <-
    x %>%
    filter(Hour == '2', Metric <= 5) %>%
    select(ID) %>%
    distinct() # N.B. this sorts groups_to_keep by ID which may not be desired
#    ID
# 1  A
# 2  C

x %>%
    inner_join(groups_to_keep, by = 'ID')
#    ID Hour Metric
# 1  A    0      3
# 2  A    2      4
# 3  A    5      1
# 4  A    6      6
# 5  A    9      7
# 6  C    0      1
# 7  C    2      1

方法 3 - 正如@thelatemail 所建议的(对于重复 ID 是安全的):

groups_not_to_keep <-
    x %>% 
    filter(Hour == 2, Metric > 5) %>% 
    select(ID)

x %>%
    anti_join(groups_not_to_keep, by = 'ID')

关于r - 根据组的特定成员过滤组的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46964794/

相关文章:

r - 在 R 中组合特定的行数据

r - 使用字符串向量输入在 dplyr 中按多列进行分组

r - 列线图因子名称错误不在设计中 : model. 类型 x 时间事件 x.df lambda pred.at

r - 检查变量是否在一对一映射中

r - 在 Shiny 中使用 data.table 卡住标题和第一列

r - R 如何从 geotiff - R Raster 包中读取 nodatavalue 标签

r - 基于无序的三列聚合一个数据框

r - 计算行的平均值,排除每行中的最高值和最低值

r - match() 与 %in% 运算符

r - 如何在 R 中用 NA 替换数字,但将替换的数字添加到不同的变量?