【问题标题】:R: How can I find the intersection of elements from two rows of a dataframe?R:如何从数据框的两行中找到元素的交集?
【发布时间】:2012-03-24 10:36:33
【问题描述】:

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

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

但它给了我一个完全无意义的答案(绝对不在十字路口的东西,而省略了在十字路口的东西)。

我应该如何解决这个问题?

【问题讨论】:

  • 您能否提供数据集,以便我们重现错误,或者更好地提供重现错误的最小数据尖晶石?
  • thing <- matrix(c(1:10,5:14),2,byrow=TRUE);intersect(thing[1,],thing[2,]) 的简单示例可以正常工作,那么您的数据是什么,您期望什么?
  • 这听起来与我的问题相似,但我使用列表列表,我将获得一个 相邻矩阵(具有所有可能交集长度的矩阵)。在我的追逐中,与自身的交点产生等于 1 的长度,另一个等于 0...
  • 对不起,伙计们...我犯了个大错误....在我的情况下,我正在使用向量列表来修复它,我现在使用[[i]]而不是@987654324 @ 到达向量... XD

标签: r set-operations


【解决方案1】:

如果列都是相同类型(例如所有数字),首先通过 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”对于水平变量和数值变量的含义可能完全不同,因此我们不应该比较数值变量和水平变量,至少不是没有仔细监督。

对于数据框有几种不同类型但什么都没有想到的场景,可能有一个巧妙的解决方案......

【讨论】:

    猜你喜欢
    • 2021-10-06
    • 2020-12-01
    • 2018-07-14
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    相关资源
    最近更新 更多