如何编写R函数合并多列观测生成新列实现调研数据清洗
解决方案
方法1:使用tidyverse套件(推荐,代码简洁易读)
直接使用pivot_longer函数完成宽表转长表,自动过滤NA值,天然支持单行多有效值的场景:
# 加载依赖包 library(tidyverse) # 数据清洗代码 df_result <- df %>% pivot_longer( cols = c(Colname1, Colname2, Colname3), # 指定要转换的三列 names_to = NULL, # 不需要保留原列名作为变量 values_to = "SubVar1", # 有效值存储到新列SubVar1 values_drop_na = TRUE # 直接丢弃值为NA的行 )
运行后得到的df_result就是你需要的目标格式。
方法2:使用Base R实现(无需安装第三方包)
如果不想引入额外依赖,可以用apply循环提取非NA值后拼接生成新表:
# 逐行提取三列中的非NA值 valid_values <- apply(df[, c("Colname1", "Colname2", "Colname3")], 1, function(row) na.omit(row)) # 根据有效值数量重复对应行的Var1、Var2,合并生成新数据框 df_result <- data.frame( Var1 = rep(df$Var1, sapply(valid_values, length)), SubVar1 = unlist(valid_values), Var2 = rep(df$Var2, sapply(valid_values, length)), row.names = NULL )
两种方法都可以兼容单行仅一个有效值、单行多个有效值的所有场景,不会出现你之前遇到的删行或者多值处理失败的问题。
内容的提问来源于stack exchange,提问作者mryannugent
相关产品推荐
相关产品推荐

