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

R语言如何删除数据框每行内跨列的重复条目

R逐行删除数据框指定列重复值并左对齐方案

需求说明

逐行处理数据框中X1至Xn列范围的内容:

  • 删除每行内的重复条目,保留值首次出现的顺序
  • 处理后将非重复值左对齐排列,右侧空位用NA填充

示例输入数据:

df <- data.frame(ID = c("100", "101", "102"),
                 X1 = c("C23.2", "C23.2", "A79.1"), 
                 X2 = c("C23.2", NA, "A79.1"),
                 X3 = c("A19.2", NA, "A79.1"))

预期输出:

ID    X2    X3    X4
1 100 C23.2 A19.2  <NA>
2 101 C23.2  <NA>  <NA>
3 102 A79.1  <NA>  <NA>

实现代码(Base R版本,无需额外安装依赖)

# 定位所有X开头的目标列
x_col_pos <- grep("^X\\d+$", colnames(df))

# 逐行完成去重、补全NA操作
df[x_col_pos] <- t(apply(df[x_col_pos], 1, function(row) {
  # 过滤空值后保留首次出现的非重复值
  uniq_valid <- unique(na.omit(row))
  # 补全长度至原X列总长度,空位填NA
  c(uniq_valid, rep(NA, length(x_col_pos) - length(uniq_valid)))
}))

# 如需和示例列名完全一致(从X2开始命名),运行下一行代码即可
colnames(df)[x_col_pos] <- paste0("X", seq_along(x_col_pos) + 1)

运行结果

运行代码后输出与预期完全匹配:

ID    X2    X3    X4
1 100 C23.2 A19.2  <NA>
2 101 C23.2  <NA>  <NA>
3 102 A79.1  <NA>  <NA>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:21:32