我有一个以下类型的数据框:
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并没有取得很大的成功。
我们将不胜感激。
答案 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
),即假设它们从N
到flag
连续编号。创建列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