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

在R语言中将列名作为单元格值填充Indicator列

问题解决:填充数据框中Indicator列的缺失值

原始数据

先构造题目中的原始数据框:

Indicator <- c('A', NA, 'I', NA)
A <- c('1', NA, NA, NA)
I <- c(NA, '0', '0', NA)
E <- c(NA, NA, NA, '0')
df <- data.frame(Indicator, A, I, E)

此时数据框内容为:

> df
  Indicator    A    I    E
1         A    1 <NA> <NA>
2      <NA> <NA>    0 <NA>
3         I <NA>    0 <NA>
4      <NA> <NA> <NA>    0

需求说明

当Indicator列的值为NA时,查找该行其余列(A、I、E)中的非缺失值,将对应列名作为Indicator的取值,最终得到Indicator列值为c('A','I','I','E')的数据框。

解决方案

方法一:Base R 实现

通过apply逐行处理数据:

df$Indicator <- apply(df, 1, function(row) {
  # 如果Indicator不为NA,直接保留原值
  if (!is.na(row["Indicator"])) {
    return(row["Indicator"])
  }
  # 否则找出当前行A/I/E列中非NA的列名
  non_na_cols <- colnames(df)[-1][!is.na(row[-1])]
  return(non_na_cols)
})

方法二:Tidyverse 实现

若习惯使用dplyr和tidyr,可用以下代码:

library(dplyr)
library(tidyr)

df <- df %>%
  rowwise() %>%
  mutate(
    Indicator = ifelse(
      is.na(Indicator),
      # 筛选除Indicator外的列,找出非NA的列名
      names(select(., -Indicator))[!is.na(c_across(-Indicator))],
      Indicator
    )
  ) %>%
  ungroup()

最终结果

运行上述任意一种方法后,数据框结果如下:

> df
  Indicator    A    I    E
1         A    1 <NA> <NA>
2         I <NA>    0 <NA>
3         I <NA>    0 <NA>
4         E <NA> <NA>    0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 06:42:17