使用dplyr按指定条件修改R数据框的var3列值
按条件修改R数据框中的值
原始数据框定义
df <- data.frame(ID = c(1, 2, 3, 3, 4, 5, 5, 7, 7, 8), var1 = c('a', 'b', 'c', 'c', 'd', 'e', 'f', 'g', 'h', 'h'), var2 = c(1, 1, 1, 0, 1, 1, 0, 0, 1, 0), var3 = c(21, 50, 40, 30, 29, 45, 33, 51, 70, 46))
需求
当行满足ID=3、var1='c'且var2=0时,将对应行的var3值增加5
方法1:基础R实现
直接通过逻辑索引定位目标行并修改:
# 定位满足条件的行,给var3加5 df$var3[df$ID == 3 & df$var1 == 'c' & df$var2 == 0] <- df$var3[df$ID == 3 & df$var1 == 'c' & df$var2 == 0] + 5
执行后查看结果:
print(df)
输出结果:
ID var1 var2 var3 1 1 a 1 21 2 2 b 1 50 3 3 c 1 40 4 3 c 0 35 5 4 d 1 29 6 5 e 1 45 7 5 f 0 33 8 7 g 0 51 9 7 h 1 70 10 8 h 0 46
方法2:tidyverse(dplyr)实现
如果习惯使用tidyverse生态,用dplyr的mutate函数更简洁:
library(dplyr) # 用ifelse处理单条件场景 df <- df %>% mutate(var3 = ifelse(ID == 3 & var1 == 'c' & var2 == 0, var3 + 5, var3)) # 或者用case_when,适合后续扩展多条件 df <- df %>% mutate(var3 = case_when( ID == 3 & var1 == 'c' & var2 == 0 ~ var3 + 5, TRUE ~ var3 # 其他行保持原值 ))
内容的提问来源于stack exchange,提问作者Loz
相关产品推荐
相关产品推荐

