列组合下的值比较

时间:2017-01-12 15:58:23

标签: r comparison date-comparison

我有一个以下类型的数据框:

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并没有取得很大的成功。

我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

使用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列进行分组。只需将ID更改为多个N列(即1),即假设它们从Nflag连续编号。创建列unique以指示所有值是否相同(即,filter值的数量是1)。然后我们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 的结果。这给出了期望的结果:

SELECT
   t.CUST_ORDER,
   (@rownum := @rownum + 1) AS FULFILL_NO,
   t.ITEM,
   t.LOCATION
FROM YOUR_TABLE t,
   (SELECT @rownum := 0) r
ORDER BY t.CUST_ORDER, t.LOCATION