列组合下的值比较

Values comparison under columns combinations

我有以下类型的数据框:

date       ID1   ID2    sum
2017-1-5    1     a     200
2017-1-5    1     b     150
2017-1-5    2     a     300
2017-1-4    1     a     200
2017-1-4    1     b     120
2017-1-4    2     a     300
2017-1-3    1     b     150

我正在尝试比较不同日期的列组合以查看 sum 值是否相等。因此,在上述示例中,我希望代码能够识别 2017-1-5 和 2017-1-4 之间 [ID1=1, ID2=b] 组合的总和不同(在我的真实数据中,我有超过2 ID 个类别和超过 2 个 Dates)。

我希望我的输出是一个数据框,其中包含包含(至少一个)不相等结果的所有组合。在我的例子中:

date       ID1   ID2    sum
2017-1-5    1     b     150
2017-1-4    1     b     120
2017-1-3    1     b     150

我尝试使用这样的循环来解决它:Is there a R function that applies a function to each pair of columns 但没有取得很大的成功。

我们将不胜感激您的帮助。

使用 dplyr,我们可以 group_by_(.dots=paste0("ID",1:2)) 然后查看值是否为 unique:

library(dplyr)
res <- df %>% group_by_(.dots=paste0("ID",1:2)) %>% 
              mutate(flag=(length(unique(sum))==1)) %>%
              ungroup() %>% filter(flag==FALSE) %>% select(-flag)

group_by_ 允许您轻松地对多个 ID 列进行分组。只需将 2 更改为您假设它们从 1N 连续编号的 ID 列(即 N)。创建列 flag 以指示所有值是否都相同(即,unique 值的数量为 1)。然后我们 filter 得到 flag==FALSE 的结果。这给出了期望的结果:

res
### A tibble: 3 x 4
##      date   ID1   ID2   sum
##     <chr> <int> <chr> <int>
##1 2017-1-5     1     b   150
##2 2017-1-4     1     b   120
##3 2017-1-3     1     b   150