如何用case_when和grepl计算不同年份的每10万人比率?
解决方法:修正语法+正确使用grepl/日期函数
首先你的代码存在语法错误:case_when的第一个条件后面多了一个闭合括号,导致TRUE ~ ...的分支被排除在case_when之外,R会直接报错。
方案1:用grepl修正代码
如果你的date列是字符类型(比如格式为"2020-03-15"),可以直接用grepl匹配年份。修正后的代码:
us_totals %>% mutate(total_deaths_per_100k = case_when( grepl("2020", date) ~ (deaths / estimated_population_2020) * 100000, TRUE ~ (deaths / estimated_population_2021) * 100000 ))
grepl("2020", date)的作用是:检查date字符串中是否包含"2020",返回一组TRUE/FALSE的逻辑值,用来判断当前行是否属于2020年的数据。
如果你的date列是Date类型(可以用class(date)查看类型),需要先把日期转成字符串再匹配:
us_totals %>% mutate(total_deaths_per_100k = case_when( grepl("2020", as.character(date)) ~ (deaths / estimated_population_2020) * 100000, TRUE ~ (deaths / estimated_population_2021) * 100000 ))
方案2:用lubridate包提取年份(更推荐)
处理日期类型数据时,用专门的日期函数比字符串匹配更可靠,能避免因日期格式变化导致的匹配错误。先安装并加载lubridate包:
install.packages("lubridate") library(lubridate)
然后提取年份进行条件判断:
us_totals %>% mutate(year = year(date), total_deaths_per_100k = case_when( year == 2020 ~ (deaths / estimated_population_2020) * 100000, year %in% c(2021, 2022) ~ (deaths / estimated_population_2021) * 100000, TRUE ~ NA_real_ # 对意外年份的数据返回NA,避免计算错误 ))
grepl基础用法说明
grepl(pattern, x)是R中用于字符串匹配的函数:
pattern:要查找的目标字符串(比如这里的"2020")x:需要检查的向量(比如你的date列)- 返回值:和
x长度一致的逻辑向量,每个元素表示对应位置的x是否包含指定的pattern
内容的提问来源于stack exchange,提问作者Grace Cooper
相关产品推荐
相关产品推荐

