如何在R中合并重复行?合并时保留Temp字段遇问题求助
解决方案
方法1:基础R的aggregate函数修正
你之前的代码有两个问题:一是分组仅指定了ID,没包含DATE,导致分组逻辑错误;二是只处理了Value字段,没对Temp做保留。由于同一DATE+ID组内的Temp值完全一致,我们可以对Temp取任意单一值(比如第一个值),同时对Value求和:
# 假设数据集名为data result <- aggregate( list(Value = data$Value, Temp = data$Temp), by = list(DATE = data$DATE, ID = data$ID), FUN = function(x) if (length(unique(x)) == 1) unique(x) else sum(x) )
或者更简化的写法(利用Temp组内值相同的特性):
result <- aggregate(Value ~ DATE + ID, data = data, sum) # 手动匹配Temp值 result$Temp <- data$Temp[match(paste(result$DATE, result$ID), paste(data$DATE, data$ID))]
方法2:dplyr包(更直观高效)
如果习惯tidyverse风格,dplyr的分组语法更清晰,适合日常数据处理:
先安装加载包:
install.packages("dplyr") library(dplyr)
执行分组聚合:
result <- data %>% group_by(DATE, ID) %>% summarise( Value = sum(Value), Temp = first(Temp), # 每组Temp值相同,取第一个即可 .groups = "drop" )
最终结果
运行上述任意代码后,都会得到你期望的合并结果:
| DATE | ID | Value | Temp |
|---|---|---|---|
| 01-01-2000 | 1 | 5 | 21 |
| 02-01-2000 | 2 | 9 | 34 |
| 02-01-2000 | 3 | 9 | 37 |
内容的提问来源于stack exchange,提问作者doraemon
相关产品推荐
相关产品推荐

