【问题标题】:R: Counting the number of matches between multiple data framesR:计算多个数据帧之间的匹配数
【发布时间】:2014-07-30 19:39:03
【问题描述】:

我想根据多个 data.frames 中唯一匹配的 ID 查找匹配数

数据如下所示:

df1: KeyID
       x
       x
       y
       y
       z

df2: KeyID
       x
       x
       x
       z
       z

df3: KeyID
       x
       y
       y
       z

我想计算数据帧之间唯一匹配的数量。

输出如下所示: 2

因为 x 和 z 是两个集合之间的唯一匹配项。

我已经这样做了,但想知道是否有更快的方法:

df1.2 <- df2[df2$KeyID %in% df1$KeyID,]
length(unique(df1.2$KeyID))

有什么想法吗?

【问题讨论】:

  • 这不是sum(unique(df1$KeyID) %in% unique(df2$KeyID)))吗?实际上,现在我考虑得更多,如果它们是因素,您可能需要将 as.character 包裹起来。
  • @BondedDust 仅在位置无关紧要的情况下......就目前而言,很难说出提问者想要什么......
  • 位置无关紧要...只想知道两个数据帧中或dfs 1,2,3等中有多少KeyID。
  • 您提到了多个数据集/向量。如果两个以上:Reduce("intersect", listofvectors)
  • @akrun reduce 是包的一部分吗?

标签: r unique


【解决方案1】:

您可以设置与intersect的交集:

v1 <- c("x", "x", "y", "y", "z")
v2 <- c("x", "x", "x", "z", "z")
intersect(v1, v2)
# [1] "x" "z"
length(intersect(v1, v2))
# [1] 2

编辑:适应问题编辑,根据akrun的建议,如果有多个向量,

v1 <- c("x", "x", "y", "y", "z")
v2 <- c("x", "x", "x", "z", "z")
v3 <- c("x", "y", "y", "z")
vector.list <- list(v1, v2, v3)

Reduce("intersect", vector.list)
# [1] "x" "z"

【讨论】:

  • 再一次,仅当位置无关紧要时。
  • @CoryB 见上面 akrun 的评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-20
  • 2013-06-20
  • 1970-01-01
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多