首页 > 解决方案 > 识别按唯一 ID 分组的行中的冲突

问题描述

我有一个包含多个重复行的数据集,类似于:

UniqueID = c(111, 111, 222, 222, 333, 333)
Color = c("Yellow", "Yellow", "Blue", "Blue", "Green", "Pink")
Height = c(11, 12, 22, 23, 33, 33)

df = data.frame(UniqueID, Color, Height)

在共享相同唯一 ID的一组行中,我希望能够突出显示任何冲突的数据(即不相同的数据)。

例如,在上表中,三个组由其唯一 ID 定义。111,222 and 333.

在每个组中,我想强调相互矛盾的数据。例如,在组中,111我会强调高度不同(11 对 12)。在小组222中,我也会突出身高。但是,在组中333我会突出显示颜色(绿色与粉红色)

我的计划是使用 为library(DT)单元格着色,这样我至少可以直观地了解冲突发生的位置,然后开始评估如何解决它们。

最终结果将类似于:

在此处输入图像描述

duplicated到目前为止,我一直在使用删除列中的重复项,但努力解决如何解决这个问题。目前我能想到的唯一方法是根据唯一 ID 将所有数据子集到单个 df 中,然后突出显示每个 df 中的重复项,但是有 11,000 行,这似乎非常笨拙。

方向上的一点将不胜感激!

标签: rcsvdataframeduplicates

解决方案


我不太确定可视化,但可以使用group_by()summarize()获得概述,以及随后的操作来查找细节,例如,

tbl = tibble(UniqueID, Color, Height)
n <- tbl %>%
    group_by(UniqueID) %>%
    summarize(color = list(unique(Color)), height = list(unique(Height))

给予

> n
# A tibble: 4 x 3
  UniqueID color     height
     <dbl> <list>    <list>
1      111 <chr [1]> <dbl [2]>
2      222 <chr [1]> <dbl [2]>
3      333 <chr [2]> <dbl [1]>
4      444 <chr [1]> <dbl [1]>

可以查询,例如,

> filter(n, lengths(color) >=2)
# A tibble: 1 x 3
  UniqueID color     height
     <dbl> <list>    <list>
1      333 <chr [2]> <dbl [1]>
> filter(n, lengths(color) >=2) %>% tidyr::unnest("color")
# A tibble: 2 x 3
  UniqueID color   height
     <dbl> <chr>   <list>
1      333 Green   <dbl [1]>
2      333 Pink    <dbl [1]>

推荐阅读