R 中的多条件 case_when
Multi conditional case_when in R
我正在尝试向我的数据框中添加一个新列(颜色)。该行中的值取决于其他两列中的值。例如,当 class 值等于 4 且 Metro_status 值等于 Metro 时,我希望在新列的相应行中返回一个特定值。我尝试使用 dplyr case_when 进行此操作,并且它在一定程度上起作用了。
输出到颜色列的大部分颜色值不符合定义的条件。例如,第一行(Nome Census Area)的颜色值应该是 "#fcc48b"
而不是 "#d68182"
.
我做错了什么?? TIA!
这是我的代码:
#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 | Metro_status == 'NA' ~ '#7a7a7a'
))
View(updated_county_data)
write.csv(updated_county_data, file="county_data_manip/updated_county_data.csv")
这是数据框的样子
备注1:
when the class value is equal to 4 and the Metro_status value is equal to Metro
在 R(和许多编程语言)中 &
是“和”。您正在使用 |
,即“或”。
备注2:
考虑将前四行简化为两行,因为地铁状态不会影响 类 4 & 3
的颜色
备注三:
要计算 class
,请考虑 base::cut()
, because it's adequate, yet simpler than dplyr::case_when()
.
在升级重新编码函数的复杂性时,这是我的偏好:
https://ouhscbbmc.github.io/data-science-practices-1/coding.html#coding-simplify-recoding
备注4:
这是一个很好的 SO post,但看看你是否可以改进你的下一个。
阅读并合并 How to make a great R reproducible example? 中的元素。特别是使用 dput()
作为输入的方面,然后是预期数据集的明确示例。
我正在尝试向我的数据框中添加一个新列(颜色)。该行中的值取决于其他两列中的值。例如,当 class 值等于 4 且 Metro_status 值等于 Metro 时,我希望在新列的相应行中返回一个特定值。我尝试使用 dplyr case_when 进行此操作,并且它在一定程度上起作用了。
输出到颜色列的大部分颜色值不符合定义的条件。例如,第一行(Nome Census Area)的颜色值应该是 "#fcc48b"
而不是 "#d68182"
.
我做错了什么?? TIA!
这是我的代码:
#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 | Metro_status == 'NA' ~ '#7a7a7a'
))
View(updated_county_data)
write.csv(updated_county_data, file="county_data_manip/updated_county_data.csv")
这是数据框的样子
备注1:
when the class value is equal to 4 and the Metro_status value is equal to Metro
在 R(和许多编程语言)中 &
是“和”。您正在使用 |
,即“或”。
备注2: 考虑将前四行简化为两行,因为地铁状态不会影响 类 4 & 3
的颜色备注三:
要计算 class
,请考虑 base::cut()
, because it's adequate, yet simpler than dplyr::case_when()
.
在升级重新编码函数的复杂性时,这是我的偏好: https://ouhscbbmc.github.io/data-science-practices-1/coding.html#coding-simplify-recoding
备注4:
这是一个很好的 SO post,但看看你是否可以改进你的下一个。
阅读并合并 How to make a great R reproducible example? 中的元素。特别是使用 dput()
作为输入的方面,然后是预期数据集的明确示例。