仅针对某些列标识重复行

时间:2017-06-14 16:29:52

标签: r duplicates

我想创建一个变量(例如reap),只有当某些列的元素与另一行的元素重复时才取值TRUE,但其他列的值不同。 样本数据可能会澄清我的问题:

    V1   V2  V3
1.   a    b   c  
2.   a    b   d 
3.   e    f   g
4.   e    f   g

例如,如果我们想要一个变量值为TRUE,当行具有相同的V1和V2但不同的V3时,则该变量应如下所示:

    V1   V2  V3  reap
1.   a    b   c  TRUE
2.   a    b   d  TRUE
3.   e    f   g  FALSE
4.   e    f   g  FALSE

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

一个想法是识别每列的所有重复项,并使用rowSums创建逻辑向量并设置条件!= ncol(df)

rowSums(sapply(df, function(i) duplicated(i)|duplicated(i, fromLast = TRUE))) != ncol(df)
#[1]  TRUE  TRUE FALSE FALSE

仅考虑第三栏

m1 <- sapply(df, function(i) duplicated(i)|duplicated(i, fromLast = TRUE))
rowSums(m1) == 2 & !m1[,3]
#[1]  TRUE  TRUE FALSE FALSE