R使用dplyr的case_when多条件赋值时结果不符合预期如何解决
错误原因
你代码里的核心问题是逻辑运算符使用错误,以及缺失值判断写法不对:
- 你需要同时满足class值和Metro_status值两个条件,应该使用逻辑与运算符
&,但你代码里全部写的是逻辑或运算符|,只要两个条件满足任意一个就会触发对应赋值,自然和预期结果不符。 - 缺失值判断不能用
== 'NA',该写法是判断值为字符串"NA",如果是R里的真实缺失值,需要用is.na(Metro_status)判断。
修正后代码
#set working directory setwd("C:/Users/weirc/OneDrive/Desktop/Undergrad Courses/Fall 2021 Classes/GHY 3814/final project/data") #load packages library(readr) library(dplyr) #load data counties <- read_csv("vaxData_counties.csv") #create new column for class updated_county_data <- counties %>% mutate(class = case_when( Series_Complete >=75 ~ 4, Series_Complete >= 50 ~ 3, Series_Complete >= 25 ~ 2, TRUE ~ 1 ), color = case_when( class == 4 & Metro_status == 'Metro' ~ '#d62023', class == 4 & Metro_status == 'Non-metro' ~ '#d68182', class == 3 & Metro_status == 'Metro' ~ '#fc9126', class == 3 & Metro_status == 'Non-metro' ~ '#fcc48b', class == 2 & Metro_status == 'Metro' ~ '#83d921', class == 2 & Metro_status == 'Non-metro' ~ '#abd977', class == 1 | is.na(Metro_status) ~ '#7a7a7a' )) View(updated_county_data) write.csv(updated_county_data, file="county_data_manip/updated_county_data.csv")
注:若最后一个条件的逻辑是需要同时满足class=1且Metro_status为缺失值,把对应行的
|换成&即可。
内容的提问来源于stack exchange,提问作者liso_maps
相关产品推荐
相关产品推荐

