在R语言中将单行DataFrame列值累加到另一DataFrame匹配列
解决单行DataFrame数值列累加到多行DataFrame对应列的问题
重建示例数据
先还原问题中的数据场景:
DF1 <- data.frame( Location = "USA", X123 = 6, X124 = 8, X125 = 9, stringsAsFactors = FALSE ) DF2 <- data.frame( Location = c("USA", "USA"), Fips = c(1001, 1002), Code = c("A", "B"), X123 = c(1, 4), X124 = c(2, 5), X125 = c(3, 6), stringsAsFactors = FALSE )
核心解决方案
不需要用rbind(它是用来合并行的,和你的需求不匹配),直接针对匹配的数值列做元素级加法即可,有两种实现方式:
方法1:手动指定目标列(列名明确时用)
如果已经清楚要累加的列名,直接指定后执行加法:
# 指定需要累加的列 target_cols <- c("X123", "X124", "X125") # 把DF1的对应列值加到DF2的每一行 DF2[target_cols] <- DF2[target_cols] + DF1[target_cols]
方法2:自动匹配共享数值列(通用场景)
如果列名不固定,或者需要适配更多列的情况,可以自动找出两个DataFrame共有的数值列再执行累加:
# 找出两个DF共有的列 shared_cols <- intersect(names(DF1), names(DF2)) # 筛选出其中的数值列 numeric_shared_cols <- shared_cols[sapply(DF1[shared_cols], is.numeric)] # 执行累加 DF2[numeric_shared_cols] <- DF2[numeric_shared_cols] + DF1[numeric_shared_cols]
执行结果
运行上述代码后,DF2的数值列会更新为原数值加上DF1对应列的值:
| Location | Fips | Code | X123 | X124 | X125 |
|---|---|---|---|---|---|
| USA | 1001 | A | 7 | 10 | 12 |
| USA | 1002 | B | 10 | 13 | 15 |
为什么rbind不可行
rbind()的作用是将两个结构相似的DataFrame按行合并,会把DF1作为新的一行添加到DF2中,而不是对现有行的数值列做累加,因此不符合你的需求。
内容的提问来源于stack exchange,提问作者poppiytt
相关产品推荐
相关产品推荐

