gpt4 book ai didi

r - 如何对数据框中的几行执行 "countif"?

转载 作者:行者123 更新时间:2023-12-04 11:20:30 26 4
gpt4 key购买 nike

我有两个数据框,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)
}

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

最佳答案

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com