首页 > 解决方案 > 在第二列中具有两个不同值的重复 id

问题描述

我正在处理一个如下所示的数据集

 id    ColA     ColB
 1     No       Red
 1     Yes      Red
 2     No       Blue
 3     No       Blue
 3     No       Blue
 4     No       Red
 4     Yes      Red

我喜欢替换 ColA 中的值

  - ID is duplicate { 1,3,4..}
  - ColB values are the same (id 1, Red,Red) but
  - ColA values are different(id1, yes, no)

如果上述情况属实,则应将 ColA 替换为 Yes。

最终数据集应如下所示

  Id    ColA     ColB
  1     Yes      Red 
  1     Yes      Red
  2     No       Blue
  3     No       Blue
  3     No       Blue
  4     Yes      Red
  4     Yes      Red

非常感谢任何建议或指示。

标签: rreplace

解决方案


这是一个解决方案data.table

library("data.table")
DT <- fread(
" id    ColA     ColB
 1     No       Red
 1     Yes      Red
 2     No       Blue
 3     No       Blue
 3     No       Blue
 4     No       Red
 4     Yes      Red")
DT[, ColA:=ifelse(uniqueN(ColB)==1 && uniqueN(ColA)==2, "Yes", ColA) , by=id][]
# > DT[, ColA:=ifelse(uniqueN(ColB)==1 && uniqueN(ColA)==2, "Yes", ColA) , by=id][]
#    id ColA ColB
# 1:  1  Yes  Red
# 2:  1  Yes  Red
# 3:  2   No Blue
# 4:  3   No Blue
# 5:  3   No Blue
# 6:  4  Yes  Red
# 7:  4  Yes  Red

没有的变体ifelse()

DT[, ColA := if (uniqueN(ColB)==1 && uniqueN(ColA)==2) "Yes", by=id][]
# > DT[, ColA := if (uniqueN(ColB)==1 && uniqueN(ColA)==2) "Yes", by=id][]
#    id ColA ColB
# 1:  1  Yes  Red
# 2:  1  Yes  Red
# 3:  2   No Blue
# 4:  3   No Blue
# 5:  3   No Blue
# 6:  4  Yes  Red
# 7:  4  Yes  Red

推荐阅读