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

R语言数据框条件填充:仅x为NA时按y指定列数填充m0值

解决方案

首先构造你的原始数据框:

df <- data.frame(
  x = c(NA, NA, 1),
  y = c(1, 2, 3),
  m0 = c(5, 15, 25),
  m1 = NA,
  m2 = NA,
  mn = NA,
  stringsAsFactors = FALSE
)

方法一:基础循环实现

先筛选出需要填充的目标列(m1及之后的列),然后遍历行判断x是否为NA,根据y指定的数量填充m0的值:

# 获取m1及后续的列名
target_cols <- grep("^m[1-9]|mn$", colnames(df), value = TRUE)

for (row_idx in 1:nrow(df)) {
  if (is.na(df$x[row_idx])) {
    # 取前y个目标列进行填充
    fill_cols <- target_cols[1:df$y[row_idx]]
    df[row_idx, fill_cols] <- df$m0[row_idx]
  }
}

方法二:tidyverse管道实现

用dplyr的按行处理逻辑,写法更简洁:

library(dplyr)

target_cols <- grep("^m[1-9]|mn$", colnames(df), value = TRUE)

df <- df %>%
  rowwise() %>%
  mutate(
    across(
      all_of(target_cols[1:y]),
      ~ if (is.na(x)) m0 else .x
    )
  ) %>%
  ungroup()

执行后得到的结果:

xym0m1m2mn
NA155NANA
NA2151515NA
1325NANANA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 02:35:33