R:如何从数据帧的两行中找到元素的交集?

时间:2012-03-06 21:40:16

标签: r set-operations

我刚开始使用R,我想知道如何找到两行数据帧中元素的交集。我试过了

intersect(thing[1,],thing[2,])

但是它给了我一个完全无意义的答案(肯定不在交集中的东西,而省略交叉点中的东西)。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

如果列的类型相同(例如所有数字),首先通过as.matrix转换为矩阵,然后应用intersect。例如,如果数据框名为 z

zz <- as.matrix(z)
intersect(zz[1,], zz[2,])

如果列具有不同类型的变量,则可能需要首先确定哪些列实际上是可比较的,因为您不希望将级别变量与整数进行比较。例如:

z <- data.frame(AA = c( 1,   1,   3,   4), 
                BB = c( 1,   5,   3,   1),
                CC = c('1', 'a', 'b', 'b'),
                DD = c( 1,   2,   3,   4)
z[z[,1] == z[,3],1]

虽然这里将返回“1”,但对于水平变量和数值变量,“1”可能具有完全不同的含义,因此我们不应该比较数值变量和水平变量,至少在没有小心疏忽。

对于数据框有几种不同类型的场景,可能有一个灵巧的解决方案,但没有想到任何事情......