列组合下的值比较
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
更改为您假设它们从 1
到 N
连续编号的 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
我有以下类型的数据框:
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
更改为您假设它们从 1
到 N
连续编号的 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