R比较2列

时间:2016-07-22 22:22:57

标签: r duplicates compare unique

有许多类似的问题,但我想比较两列并删除两列中的所有重复项,以便剩下的所有内容都是每列中的唯一观察值。注意:重复项不是并排的。如果可能的话,我还想要一份重复列表(不仅仅是TRUE / FALSE)。谢谢!

        C1 C2
     1  a  z 
     2  c  d
     3  f  a 
     4  e  c 

会变成

        C1 C2
     1  f  z
     2  e  d

有重复列表

    duplicates: a, c 

2 个答案:

答案 0 :(得分:1)

这是另一个答案

 where_dupe <- which(apply(df, 2, duplicated), arr.ind = T)

为您提供原始数据框中重复元素的位置。

col_unique <- setdiff(1:ncol(df), where_dupe)

为您提供哪些列没有重复

您可以通过索引查找值。

df[,col_unique]

答案 1 :(得分:0)

以下是使用duplicatedlapply的基本R方法。

temp <- unlist(df)
# get duplicated elements
myDupeVec <- unique(temp[duplicated(temp)])

# get list without duplicates
noDupesList <- lapply(df, function(i) i[!(i %in% myDupeVec)])

noDupesList
$C1
[1] "f" "e"

$C2
[1] "z" "d"

数据

df <- read.table(header=T, text="   C1 C2
     1  a  z 
     2  c  d
     3  f  a 
     4  e  c ", as.is=TRUE)

请注意,这会返回一个列表。这是更灵活的结构,因为通常存在一个级别可能在特定变量中重复多次的可能性。如果不是这种情况,您可以使用do.calldata.frame将结果放入矩形结构中。

do.call(data.frame, noDupesList)
  C1 C2
1  f  z
2  e  d