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

如何在R中合并相同id和date的行,整合time1与time2列

R语言:按id和date合并行并整合非NA值

你需要按id和date分组,将每组内多行的非NA值整合到对应列,合并为单行。以下是两种可行的方案:

1. 使用tidyverse(dplyr包)

先加载dplyr包,按id和date分组后,对目标列提取非NA值:

# 加载包
library(dplyr)

# 原始数据
id <- c('A', 'B', 'C', 'B', 'C')
date <- c('2023-10-09', "2023-10-10", "2023-10-10", "2023-10-10", "2023-10-10")
time1 <- c('2023-10-09 05:55:55', '2023-10-10 05:55:55', NA, NA, '2023-10-10 10:55:55')
time2 <- c('2023-10-09 06:10:55', NA, '2023-10-10 20:55:55', '2023-10-10 20:59:55', NA)
df <- data.frame(id, date, time1, time2)

# 合并处理
df_merged <- df %>%
  group_by(id, date) %>%
  summarize(across(c(time1, time2), ~ na.omit(.)[1]), .groups = 'drop')

# 查看结果
df_merged

运行后输出:

id    date       time1               time2              
  <chr> <chr>      <chr>               <chr>              
1 A     2023-10-09 2023-10-09 05:55:55 2023-10-09 06:10:55
2 B     2023-10-10 2023-10-10 05:55:55 2023-10-10 20:59:55
3 C     2023-10-10 2023-10-10 10:55:55 2023-10-10 20:55:55

2. 使用基础R(无需额外包)

用aggregate函数按分组条件处理,自定义函数提取非NA值:

# 原始数据(同上)
id <- c('A', 'B', 'C', 'B', 'C')
date <- c('2023-10-09', "2023-10-10", "2023-10-10", "2023-10-10", "2023-10-10")
time1 <- c('2023-10-09 05:55:55', '2023-10-10 05:55:55', NA, NA, '2023-10-10 10:55:55')
time2 <- c('2023-10-09 06:10:55', NA, '2023-10-10 20:55:55', '2023-10-10 20:59:55', NA)
df <- data.frame(id, date, time1, time2)

# 合并处理
df_merged <- aggregate(. ~ id + date, data = df, FUN = function(x) na.omit(x)[1])

# 查看结果
df_merged

运行后输出与tidyverse方案一致。

逻辑说明

两种方案核心逻辑相同:

  • 按id和date作为分组依据
  • 对每组的time1、time2列,提取第一个非NA值(因每组目标列仅存在一个有效非NA值,因此提取第一个即可得到目标结果)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 16:15:03