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

如何对名称相似的列求和?plyr是否有对应列处理函数?

对名称相似的列求和:plyr包实现方案

当然有办法实现你要的操作!虽然plyr没有直接提供按列名分组求和的专属函数,但我们可以结合它的工具函数,轻松完成重复列名的求和需求。

先明确你的输入数据和期望输出:

输入数据

# 构造你的输入数据框
df <- data.frame(
  C1 = c(2, 12),
  C1 = c(21, 12),
  T1 = c(12, 34),
  T1 = c(12, 45),
  row.names = c("n1", "n2")
)

# 查看输入
df
#    C1 C1 T1 T1
# n1  2 21 12 12
# n2 12 12 34 45

期望输出

C1 T1
n1 23 24
n2 22 79

用plyr实现的方法

我们可以通过提取唯一列名 + 遍历分组求和的方式来完成:

library(plyr)

# 第一步:获取所有唯一的列名
unique_col_names <- unique(colnames(df))

# 第二步:对每个唯一列名,筛选对应列并按行求和
summed_result <- ldply(unique_col_names, function(col) {
  # 筛选当前列名对应的所有列,然后按行求和
  rowSums(df[, colnames(df) == col, drop = FALSE])
})

# 第三步:调整结果的列名和行名,匹配期望格式
colnames(summed_result) <- unique_col_names
rownames(summed_result) <- rownames(df)

# 查看最终结果
summed_result

运行这段代码后,就能得到你想要的按相似列名求和的结果啦。


额外补充:用dplyr简化操作(可选)

如果你不局限于plyr,用dplyr的长格式转换思路会更直观:

library(dplyr)
library(tidyr)

df %>%
  tibble::rownames_to_column("row_id") %>%  # 把行名转成列,方便分组
  pivot_longer(-row_id, names_to = "col_group") %>%  # 转成长格式
  group_by(row_id, col_group) %>%  # 按行和列组分组
  summarise(total = sum(value)) %>%  # 求和
  pivot_wider(names_from = col_group, values_from = total) %>%  # 转回宽格式
  tibble::column_to_rownames("row_id")  # 恢复行名

这个方法代码更简洁,可读性也更强,适合处理更复杂的列分组场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:51:49