R中根据其他列多条件替换数据框指定列数值的方法求助
R语言条件替换数据框值的可行方案
以下提供3种不同实现方式,你可以根据自己的使用习惯选择:
- 基础R逻辑索引方案(入门首选,语法最直观)
假设你的数据框命名为df,直接通过逻辑判断筛选符合要求的行,对z列赋值即可:
df[df$x > 300 & df$x < 600 & df$y > 0 & df$y < 100 & df$z > 160, "z"] <- 115
这种写法不需要调用额外函数,逻辑清晰,不容易写错参数。
- ifelse函数实现方案
如果你想用ifelse函数完成,正确写法如下:
df$z <- ifelse( test = df$x > 300 & df$x < 600 & df$y > 0 & df$y < 100 & df$z > 160, yes = 115, no = df$z )
之前调用ifelse失败大概率是第三个参数设置错误,没有保留条件不成立时的原有z值。另外注意逻辑连接符要用矢量运算的&,不能用仅对标量生效的&&。
- dplyr包实现方案(适用于tidyverse生态用户)
如果你已经在使用dplyr处理数据,可以用管道流写法:
library(dplyr) df <- df %>% mutate(z = if_else(x > 300 & x < 600 & y > 0 & y < 100 & z > 160, 115, z))
小提示:替换操作前可以先运行sum(df$x > 300 & df$x < 600 & df$y > 0 & df$y < 100 & df$z > 160),确认符合条件的行数是否符合预期,避免误改数据。
内容的提问来源于stack exchange,提问作者Olivia Floyd
相关产品推荐
相关产品推荐

