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

基于Key和Date合并重复行并求和Value列的R语言实现

嗨,作为R新手不用紧张,首次提问完全没问题😉 针对你要合并重复行(Key和Date相同)、求和Value列并保留其他列第一行内容的需求,我给你两种常用的实现方法,都比手动处理高效得多:

方法1:使用dplyr包(推荐,语法更直观)

dplyr是R中处理数据非常常用的工具包,语法清晰易懂,适合新手:

# 如果没安装过dplyr先执行安装
# install.packages("dplyr")
library(dplyr)

# 处理重复行并合并
processed_data <- Data %>%
  group_by(Key, Date) %>%  # 按Key和Date分组
  summarize(
    Value = sum(Value, na.rm = TRUE),  # 对每组的Value列求和,na.rm处理缺失值
    across(-c(Key, Date, Value), first)  # 其他列保留每组第一行的内容
  ) %>%
  ungroup()  # 取消分组状态,恢复普通数据框

解释:across(-c(Key, Date, Value), first)表示排除Key、Date、Value这三列后,剩下的所有列都取每组的第一行值;如果你的数据里没有缺失值,可以去掉na.rm = TRUE。

方法2:使用Base R(无需额外安装包)

如果你不想安装新包,用Base R也能实现:

# 按Key和Date对行索引分组
groups <- split(seq(nrow(Data)), list(Data$Key, Data$Date))

# 遍历每个组,处理后合并
processed_data <- do.call(rbind, lapply(groups, function(idx) {
  group_rows <- Data[idx, ]  # 取出当前组的所有行
  group_rows$Value[1] <- sum(group_rows$Value, na.rm = TRUE)  # 求和后替换第一行的Value
  group_rows[1, ]  # 只保留更新后的第一行
}))

# 重置行名(可选,让结果更整洁)
rownames(processed_data) <- NULL

解释:split函数把数据按Key和Date拆分成不同组,lapply遍历每个组完成求和和保留第一行的操作,最后用do.call(rbind)把所有组的结果合并成一个数据框。

用你的示例数据测试的话,两种方法都会得到你期望的输出:Key为C、Date为2000-04的行Value会变成1.15,其他列保留第一行的name1和x1,其余无重复的行保持不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:21:10