R语言含NA值的列合并:生成合并值列及来源标识新列
R实现多列合并并标记来源列的方法
以下两种方案均适配你给出的示例数据结构(每行仅一个Temp类列存在非NA值):
步骤1:构造示例数据(可替换为你的实际数据)
df <- data.frame( Sample = c("A", "B", "C"), Temp1 = c(121.3, NA, NA), Temp2 = c(NA, 35.1, NA), Temp3 = c(NA, NA, 39.9) )
方案1:tidyverse简洁实现(推荐)
依赖dplyr和tidyr包,语法清晰易维护:
library(tidyverse) df_result <- df %>% pivot_longer( cols = starts_with("Temp"), names_to = "Reading", values_to = "Temp", values_drop_na = TRUE ) %>% # 调整Reading格式为你需要的"Temp 1"样式,不需要可删除该行 mutate(Reading = str_replace(Reading, "Temp", "Temp "))
方案2:基础R实现(无需加载第三方包)
适合轻量运行场景,无需安装额外依赖:
# 定位每行非NA的Temp列索引 temp_cols <- c("Temp1", "Temp2", "Temp3") col_pos <- max.col(!is.na(df[temp_cols]), ties.method = "first") # 生成结果表 df_result <- data.frame( Sample = df$Sample, Temp = df[temp_cols][cbind(1:nrow(df), col_pos)], Reading = paste("Temp", sub("Temp", "", temp_cols[col_pos])) )
运行后输出结果:
Sample Temp Reading 1 A 121.3 Temp 1 2 B 35.1 Temp 2 3 C 39.9 Temp 3
内容的提问来源于stack exchange,提问作者kiely90
相关产品推荐
相关产品推荐

