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

如何在R中将数据框的多个TagNo列合并为单一列?

解决方案

方法一:使用dplyr的coalesce函数(推荐)

利用coalesce()函数逐行提取第一个非NA值,高效合并所有TagNo列:

library(dplyr)

# 合并所有TagNo列为单一列
df_final <- dfmerge %>%
  # 提取所有TagNo相关列,取第一个非NA值作为新的TagNo
  mutate(TagNo = coalesce(!!!select(., starts_with("TagNo")))) %>%
  # 删除原来的多个TagNo列
  select(-starts_with("TagNo")) %>%
  # 将TagNo列移到ID列之后
  relocate(TagNo, .after = ID)

方法二:Base R实现

如果不想依赖dplyr,也可以用base R的apply()函数处理:

# 提取所有TagNo列的列索引
tag_cols <- grepl("TagNo", colnames(dfmerge))
# 逐行取第一个非NA值作为新TagNo
dfmerge$TagNo <- apply(dfmerge[, tag_cols], 1, function(x) x[!is.na(x)][1])
# 删除原有的多个TagNo列
dfmerge <- dfmerge[, !tag_cols | colnames(dfmerge) == "TagNo"]
# 调整列顺序,将TagNo放在ID之后
dfmerge <- dfmerge[, c("ID", "TagNo", setdiff(colnames(dfmerge), c("ID", "TagNo")))]

结果说明

两种方法都会得到你期望的结果:每个ID对应唯一的TagNo列,保留所有Info相关列,列顺序符合要求。因为你提到每个ID的TagNo值始终一致,所以不用担心取到不同值的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:17:40