You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于另一数据框的聚合数据为R数据框添加列?

R语言:为数据框匹配对应列的求和结果

数据定义

df1 <- data.frame(ID = c("A01", "B01", "C03"), meta = LETTERS[1:3])
df2 <- data.frame(C03 = c(15,25,35), A01 = c(10,20,30), B01 = c(20,20,30))

需求

为df1中的每个ID,附加df2中对应列的colSums计算结果。

现有基础实现

vec1 <- as.data.frame(colSums(df2))
vec1$ID <- row.names(vec1)

df.m <- merge(df1, vec1, by = "ID")
df.m  # 期望输出

期望输出

ID meta colSums(df2)
1 A01    A           60
2 B01    B           70
3 C03    C           75

更优实现方式

1. Base R 极简写法

无需创建中间数据框,直接通过match匹配ID与列名,一步添加结果列:

df1$colSums <- colSums(df2)[match(df1$ID, colnames(df2))]

执行后df1就会包含所需的求和列,结果与期望一致。

2. tidyverse 风格写法

如果常用dplyr等tidyverse工具,代码会更直观:

library(dplyr)

df1 <- df1 %>%
  mutate(colSums = colSums(df2)[ID])

利用mutate直接根据ID匹配df2的列求和结果,逻辑清晰。

3. 结构化转换后连接

如果需要更清晰的中间步骤,可先将列和转换为带ID的数据框,再做左连接:

library(tibble)
library(dplyr)

# 先把df2的列和转成带ID的表格
col_sums_tbl <- colSums(df2) %>%
  enframe(name = "ID", value = "colSums")

# 左连接到df1
df1 <- df1 %>%
  left_join(col_sums_tbl, by = "ID")

这种方式在复杂数据场景下更易扩展和维护。

内容的提问来源于stack exchange,提问作者nouse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 20:22:39