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

如何基于indicator列规则,用apply函数填充R数据框中的缺失值?

使用apply按列填充NA值的解决方案

没问题,我来帮你搞定这个按规则填充NA的需求,用apply(MARGIN=2)完全可以实现。先理清楚思路:我们需要对col1和col2逐列处理,遇到NA时根据对应行的indicator值选择填充10还是0。

第一步:确认你的数据框

先把你的数据框构造出来(方便后续测试和验证):

library(tibble)
df <- tibble('col1' = c(NA, 1, 2), 'col2' = c(34, NA, 44), 'indicator' = c(1,1,0))

第二步:用apply按列执行填充逻辑

核心代码如下,每一步都加了注释说明:

# 只处理col1和col2,保留indicator列不变
df[, c("col1", "col2")] <- apply(
  X = df[, c("col1", "col2")],  # 指定需要处理的目标列
  MARGIN = 2,                   # MARGIN=2表示按列遍历处理
  FUN = function(x) {
    # 定位当前列中所有NA的位置
    na_positions <- is.na(x)
    # 对NA位置的元素,根据对应行的indicator值填充:indicator==1填10,否则填0
    x[na_positions] <- ifelse(df$indicator[na_positions] == 1, 10, 0)
    # 返回处理后的列
    return(x)
  }
)

第三步:查看处理后的结果

运行完代码后,你的数据框会变成这样:

> df
# A tibble: 3 × 3
   col1  col2 indicator
  <dbl> <dbl>      <dbl>
1    10    34          1
2     1    10          1
3     2    44          0

完全符合你的要求:第一行col1的NA因indicator=1被填充为10,第二行col2的NA因indicator=1被填充为10,非NA值全部保留原样。

补充说明

你提到已经用complete.cases标记了不完整案例,其实也可以用这个标记列替代is.na(x)来定位缺失值,但直接用is.na(x)识别当前列的NA更直接,不需要依赖额外的标记列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:01:40