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

R语言如何按递增序列规则替换数据框各列的NA缺失值

解法1:基础R实现

首先加载样本数据:

df <- structure(list(`Col A` = c(11, 12, 13, 14, 15), `Col B` = c(NA, 
11, 12, 13, 14), `Col C` = c(NA, NA, 11, 12, 13), `Col D` = c(NA, 
NA, NA, 11, 12)), row.names = c(NA, -5L), class = c("tbl_df", 
"tbl", "data.frame"))

如果列数少可以直接逐列替换:

# 替换Col B的1个NA为15
df$`Col B`[is.na(df$`Col B`)] <- 15

# 替换Col C的2个NA为14、15
df$`Col C`[is.na(df$`Col C`)] <- c(14,15)

# 替换Col D的3个NA为13、14、15
df$`Col D`[is.na(df$`Col D`)] <- c(13,14,15)

如果后续扩展列数,可以用通用循环批量处理,不需要手动调整每列逻辑:

# 从第二列(Col B)开始批量处理所有列
for (col_idx in 2:ncol(df)) {
  na_pos <- is.na(df[[col_idx]])
  na_count <- sum(na_pos)
  # 自动生成对应长度的递增填充序列
  df[[col_idx]][na_pos] <- seq(from = 15 - na_count + 1, to = 15)
}

解法2:tidyverse实现

用dplyr语法代码更简洁易读:

library(dplyr)

df_result <- df %>%
  mutate(
    `Col B` = replace_na(`Col B`, 15),
    `Col C` = replace_na(`Col C`, c(14,15)),
    `Col D` = replace_na(`Col D`, c(13,14,15))
  )

批量处理通用写法:

library(dplyr)
library(purrr)

df_result <- df %>%
  # 跳过第一列Col A,处理后面所有列
  modify_at(-1, ~{
    na_cnt <- sum(is.na(.x))
    replace_na(.x, seq(15 - na_cnt + 1, 15))
  })

两种方法得到的最终结果一致,符合要求:

Col ACol BCol CCol D
11151413
12111514
13121115
14131211
15141312

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 22:57:00