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
相关产品推荐
相关产品推荐

