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

如何清洗R dataframe数据 将多列对应的两行合并为单行

数据清洗需求说明

现有R dataframe原始格式如下:
原数据格式示例图
需要清洗转换为如下目标格式,将对应同一条记录的两行数据合并为一行完整数据:
目标数据格式示例图


实现方案

方法1:tidyverse实现(推荐)

首先加载依赖包:

library(tidyverse)

如果原始数据的空白值为NA,直接执行如下代码(假设原始数据框名为df):

df_clean <- df %>%
  # 每两行划分为一组,对应一条完整记录
  mutate(group_id = rep(1:(n()/2), each = 2)) %>%
  group_by(group_id) %>%
  # 组内提取每列的非空值完成合并
  summarise(across(everything(), ~na.omit(.x)[1])) %>%
  ungroup() %>%
  # 移除辅助分组列
  select(-group_id)

如果原始数据的空白值为空字符串而非NA,先统一转成NA再处理:

df_clean <- df %>%
  # 空字符串转换为NA
  mutate(across(everything(), ~ifelse(str_squish(.x) == "", NA, .x))) %>%
  mutate(group_id = rep(1:(n()/2), each = 2)) %>%
  group_by(group_id) %>%
  summarise(across(everything(), ~na.omit(.x)[1])) %>%
  ungroup() %>%
  select(-group_id)

方法2:base R实现

# 生成辅助分组ID
group_id <- rep(1:(nrow(df)/2), each = 2)
# 按组聚合,提取每列非空值
df_clean <- aggregate(. ~ group_id, df, function(x) na.omit(x)[1], na.action = na.pass)
# 删除辅助分组列
df_clean$group_id <- NULL

注意事项

如果数据的分组规则不是严格每两行对应一条记录,按需调整group_id的生成逻辑即可适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:24:05