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

R语言DataFrame列处理:按唯一值重组行,匹配列填充对应值

需求实现方案

示例输入数据

A <- c('ABC','GHI',rep(NA,3))
B <- c('AAB','ABC','BCE','CAB',NA)
C <- c('ABC','BCE','GHI','XXX','ZZZ')
D <- c('BCE',rep(NA,4))
E <- c('GHI','ZZZ','BAR',rep(NA,2))
df <- data.frame(A,B,C,D,E)

原DataFrame输出:

A    B   C    D    E
1  ABC  AAB ABC  BCE  GHI
2  GHI  ABC BCE <NA>  ZZZ
3 <NA>  BCE GHI <NA>  BAR
4 <NA>  CAB XXX <NA> <NA>
5 <NA> <NA> ZZZ <NA> <NA>

期望输出

A   B   C   D   E
1   ABC ABC ABC NA  NA
2   GHI NA  GHI NA  GHI
3   NA  AAB NA  NA  NA
4   NA  BCE BCE BCE NA
5   NA  NA  ZZZ NA  ZZZ
6   NA  NA  XXX NA  NA
7   NA  NA  NA  NA  BAR
8   NA  CAB NA  NA  NA

实现思路

  • 提取整个DataFrame中的所有唯一非NA值,作为输出每行对应的核心标识值
  • 针对每个唯一值,遍历原DataFrame的每一列:若该值在列中出现过,则填充该值;否则填充NA
  • 将遍历结果整理为标准DataFrame格式

R代码实现

# 获取所有唯一非NA值
unique_vals <- unique(unlist(df)[!is.na(unlist(df))])

# 生成每行的结果
result_list <- lapply(unique_vals, function(val) {
  sapply(df, function(col) {
    if(val %in% col) val else NA_character_
  })
})

# 转换为DataFrame并去除行名
result_df <- do.call(rbind, result_list)
rownames(result_df) <- NULL

# 查看最终结果
print(result_df)

运行后输出结果与期望一致,行顺序可根据需求自行调整排序规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:12:22