基于位置与日期条件合并数据行的R语言实现问题
解决方案:合并相同分组的观测值
你的需求核心是:将**相同location、start和detected**的观测行合并,对count字段求和,其他字段保留对应分组的唯一值。
原始数据集
ex_df <- data.frame( location = c('park', 'park', 'school', 'cemetery', 'cemetery', 'park'), count = c(50, 50, 4, 9, 26, 10), start = c('7/24/1999', '7/24/1999', '8/9/2000','8/19/2000', '9/2/2001', '9/2/2001'), detected = c('detected', 'detected', 'not detected', 'detected', 'not detected', 'detected') )
目标精简数据集
target_df <- data.frame( location = c('park', 'school', 'cemetery', 'cemetery', 'park'), count = c(100, 4, 9, 26, 10), start = c('7/24/1999', '8/9/2000','8/19/2000', '9/2/2001', '9/2/2001'), detected = c('detected', 'not detected', 'detected', 'not detected', 'detected') )
正确实现方法
方法1:使用dplyr包(推荐)
你之前用group_by后出现多余观测,是因为没配合summarise完成聚合操作。summarise会自动将每个分组压缩为一行,不会残留冗余数据:
library(dplyr) clean_df <- ex_df %>% # 按三个字段分组 group_by(location, start, detected) %>% # 对count求和,同时取消分组状态 summarise(count = sum(count), .groups = "drop") # 输出结果 clean_df
方法2:使用Base R(无需额外包)
用aggregate函数直接完成分组求和:
clean_df <- aggregate(count ~ location + start + detected, data = ex_df, sum)
两种方法都能直接得到你需要的精简数据集,不会有多余观测残留。
内容的提问来源于stack exchange,提问作者Cursed_King1453
相关产品推荐
相关产品推荐

