作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个数据框,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 (i in 1:nrow(B)) {
B$count[i] <- sum(A$key1 == B$key1[i] & A$key2 == B$key2[i], na.rm = TRUE)
}
最佳答案
base R
中的一个选项(类似于@Sotos tidyverse 选项)
aggregate(cbind(count = !is.na(value)) ~ key1 + key2, merge(A, B, all = TRUE), sum)
# key1 key2 count
#1 2 1 1
#2 1 2 2
#3 3 3 0
data.table
library(data.table)
setDT(A)[B, .(count = sum(!is.na(value))), on = .(key1, key2), by = .EACHI]
# key1 key2 count
#1: 1 2 2
#2: 2 1 1
#3: 3 3 0
关于r - 如何对数据框中的几行执行 "countif"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54125509/
我是一名优秀的程序员,十分优秀!