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()
执行后得到的结果:
| x | y | m0 | m1 | m2 | mn |
|---|---|---|---|---|---|
| NA | 1 | 5 | 5 | NA | NA |
| NA | 2 | 15 | 15 | 15 | NA |
| 1 | 3 | 25 | NA | NA | NA |
内容的提问来源于stack exchange,提问作者littletimmy
相关产品推荐
相关产品推荐

