R dataframe中应用多条件列表规则实现字段赋值的问题
实现方案
你遇到的问题核心是R中NA参与等值比较时会返回NA而非布尔值,导致ifelse无法命中NA对应的分支,调整条件判断的优先级即可解决问题。
基础R实现
不需要加载额外包,直接嵌套ifelse并优先判断NA:
Code = c("OFF15","OFF5",NA,"OFF5",NA) count= c(3,4,4,2,1) x= data.frame(Code,count) x$Code <- ifelse( x$count <= 3, x$Code, ifelse( is.na(x$Code) | x$Code != "OFF15", "OK10", x$Code ) )
dplyr 实现(推荐,可读性更高)
用case_when避免多层ifelse嵌套,逻辑更清晰:
library(dplyr) Code = c("OFF15","OFF5",NA,"OFF5",NA) count= c(3,4,4,2,1) x= data.frame(Code,count) x <- x %>% mutate(Code = case_when( count <= 3 ~ Code, is.na(Code) ~ "OK10", Code != "OFF15" ~ "OK10", TRUE ~ Code ))
处理后的结果为:
| Code | count |
|---|---|
| OFF15 | 3 |
| OK10 | 4 |
| OK10 | 4 |
| OFF5 | 2 |
| NA | 1 |
如果需要和你给出的预期输出对齐,调整对应条件的判断阈值即可。
内容的提问来源于stack exchange,提问作者Joe Ng
相关产品推荐
相关产品推荐

