将分散的变量值整理为整洁的单行宽格式(R语言)
R中合并同ID多行分散值并去除NA的解决方案
问题场景
将JSON文本文件转换为dataframe后,出现同ID的变量值分散在多行的情况,原本600条观测变成37200条,且存在大量NA。示例数据如下:
Var1 Var2 Var3 Var4 Var5 Var6 ID 1 4 NA NA NA NA NA 1 2 NA 3 2 NA NA NA 1 3 NA NA NA 1 8 NA 1 4 NA NA NA NA NA 7 1
期望得到的合并后结果:
Var1 Var2 Var3 Var4 Var5 Var6 ID 1 4 3 2 1 8 7 1
由于变量多达146个,手动处理或创建滞后变量效率极低,需要高效的批量处理方案。
解决方案
使用tidyverse包中的dplyr工具,按ID分组后提取每个变量的非NA值合并成一行:
library(dplyr) # 假设你的数据框名为df clean_df <- df %>% group_by(ID) %>% summarise(across(everything(), ~first(na.omit(.x)))) %>% ungroup()
代码说明
group_by(ID):按ID分组,确保同一ID的行被归为一组across(everything(), ~first(na.omit(.x))):对所有列执行操作,先去除列中的NA,再取第一个值(同ID下每个变量仅存在一个非NA值,刚好提取到目标值)ungroup():取消分组,还原为普通dataframe结构
如果数据中存在同一ID同一变量有多个非NA值的情况,可根据需求替换first为last、mean等聚合函数。
参考问题
相关参考问题原内容为:将多变量重复测量数据转换为宽格式时出现NA值和多余行?
内容的提问来源于stack exchange,提问作者Jessi
相关产品推荐
相关产品推荐

