我刚开始使用R,我想知道如何找到两行数据帧中元素的交集。我试过了
intersect(thing[1,],thing[2,])
但是它给了我一个完全无意义的答案(肯定不在交集中的东西,而省略交叉点中的东西)。
我该如何解决这个问题?
答案 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”可能具有完全不同的含义,因此我们不应该比较数值变量和水平变量,至少在没有小心疏忽。
对于数据框有几种不同类型的场景,可能有一个灵巧的解决方案,但没有想到任何事情......