R语言如何仅在新向量元素非NA时条件更新数据框对应列值
R语言数据框部分赋值操作说明
需求背景
日常更新R语言数据框变量时,通常使用常规赋值操作:df[var] <- new_vector
如果new_vector同时存在多个NA值与非NA值,需求为:仅修改df[var]中对应new_vector为非NA位置的数值,new_vector为NA的对应行保留df[var]的原有数值。
示例场景
new_vector <- c(0, NA, NA, 0, 1) df <- data.frame(1:5,11:15) colnames(df) <- c("A", "B") df # A B #1 1 11 #2 2 12 #3 3 13 #4 4 14 #5 5 15 # 直接赋值的实际结果 df["B"] <- new_vector df # A B #1 1 0 #2 2 NA #3 3 NA #4 4 0 #5 5 1 # 预期结果 # A B #1 1 0 #2 2 12 #3 3 13 #4 4 0 #5 5 1
实现方案
基础R方案
仅对new_vector非NA的对应位置赋值即可:
non_na_idx <- !is.na(new_vector) df$B[non_na_idx] <- new_vector[non_na_idx]
dplyr方案
使用coalesce()函数优先取新向量的非NA值,保留原列的其余值:
library(dplyr) df <- df %>% mutate(B = coalesce(new_vector, B))
内容的提问来源于stack exchange,提问作者gota
相关产品推荐
相关产品推荐

