You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 03:15:07