我有两个数据框,A 和 B。在 B 中,我有两个键列,对于 B 中的每一行,我需要计算 A 中与这些键匹配的行数。

我知道如何使用 for 循环解决问题,但它需要永远,我想知道是否有更聪明的方法来做到这一点。我对 R 还是很陌生,所以如果我遗漏了一些明显的解决方案,你必须原谅我。

数据框具有以下结构。当然,实际上数据框要大得多。

A <- data.frame(c(1, 2, 1), c(2, 1, 2), c("alpha", "bravo", "charlie"))
colnames(A) <- c("key1", "key2", "value")

B <- data.frame(c(1, 2, 3), c(2, 1, 3), NA)
colnames(B) <- c("key1", "key2", "count")

我使用了以下 for 循环并得到了正确的结果。
for (i in 1:nrow(B)) {
  B$count[i] <- sum(A$key1 == B$key1[i] & A$key2 == B$key2[i], na.rm = TRUE)
}

但是,代码运行时间很长,我怀疑有更好的方法可以做到这一点。我将不胜感激任何帮助!

最佳答案

使用与您相同的逻辑,但没有使用 mapply 的循环

B$count <- mapply(function(x, y)
      sum(x == A$key1 & y == A$key2, na.rm = TRUE), B$key1, B$key2)

B
#  key1 key2 count
#1    1    2     2
#2    2    1     1
#3    3    3     0

关于r - 如何对数据框中的几行执行 "countif"?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54125509/

10-12 19:44