首页 > 解决方案 > 比较中的 DPLYR 不同的排除列但保留结果?

问题描述

我有一个类似于这个结构的data.frame:

a b c
1 1 A
1 1 A
1 1 BLAH
2 2 BLAH
2 3 C

df <- data.frame(a=c(1,1,1,2,2),b=c(1,1,1,2,3), c=c("A","A","BLAH","BLAH", "C"))

我只需要根据变量“a”和“b”对不同的数据进行子集化,但在结果中保留变量“c”-但带有一个条件。如果有重复,只保留不等于“BLAH”值的版本。

输出应如下所示:

1 1 A
2 2 BLAH
2 3 C

所以我有一个不同的子集并选择丢弃“BLAH”版本?另外,请注意,我只保留了所需的“1 1 A”行之一。

标签: rdplyrdistincttidyverse

解决方案


df %>%
    group_by(a, b) %>%
    summarize(c = c[max(1, which(c != "BLAH"))][1]) %>%
    ungroup()
## A tibble: 3 x 3
#      a     b c    
#  <dbl> <dbl> <fct>
#1     1     1 A    
#2     2     2 BLAH 
#3     2     3 C    

推荐阅读