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

R语言如何合并同一列中Id对应的相同日期数据行

问题原因

  1. 你使用dplyr代码仅返回一行汇总结果,核心是包冲突导致:同时加载plyr和dplyr包时,如果plyr加载顺序在后,会覆盖dplyr的summarize()函数,使得分组逻辑失效,直接返回全局聚合结果。
  2. 第二种aggregate方法不符合需求的原因是仅按Id单维度分组,没有同时按Id+日期双维度分组,自然每个Id仅返回一条结果,丢失多日期数据。

解决方案

dplyr实现(推荐)

library(dplyr)

# 1. 先处理原始数据
final_df <- notimesw %>%
  ungroup() %>% # 清除原始数据自带的分组规则,避免干扰
  mutate(date = as.Date(date)) %>% # 统一日期格式,避免字符串格式差异导致分组错误
  group_by(Id, date) %>% # 按Id+日期双维度分组,仅合并同Id同日期的行
  dplyr::summarise(
    WeightPounds = mean(WeightPounds, na.rm = TRUE),
    TotalSleepRecords = mean(TotalSleepRecords, na.rm = TRUE),
    TotalMinutesAsleep = mean(TotalMinutesAsleep, na.rm = TRUE),
    .groups = "drop" # 汇总后自动取消分组,避免后续操作异常
  ) %>%
  # 把全NA分组返回的NaN替换为NA,符合常规使用习惯
  mutate(across(where(is.numeric), ~ifelse(is.nan(.), NA, .)))

注:代码中加dplyr::前缀指定调用dplyr的summarise函数,彻底避免包冲突问题

Base R aggregate实现

# 先统一日期格式
notimesw$date <- as.Date(notimesw$date)

final_df_agg <- aggregate(
  . ~ Id + date,
  data = notimesw,
  FUN = function(x) mean(x, na.rm = TRUE),
  na.action = na.pass # 保留所有分组,避免某列全为NA的分组被丢弃
)

# 替换NaN为NA
final_df_agg[sapply(final_df_agg, is.nan)] <- NA

两种方法执行后,都会保留所有Id+日期的唯一组合,仅合并同一Id同一日期下的多条数据,完全符合需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:36:03