在R中计算多列动态差值:处理含NA的情况
在R中根据年份缺失情况动态计算个体增长率
步骤1:构造示例数据
先复现你提供的原始数据框:
df <- data.frame( ID = c("A", "B", "C"), Year1 = c(2021, 2022, 2021), Year2 = c(2022, 2023, 2022), Year3 = c(NA, 2024, NA), Size1 = c(10, 20, 5), Size2 = c(15, 21, 20), Size3 = c(NA, 25, NA) )
步骤2:使用dplyr::case_when实现条件计算
用case_when函数根据Year3是否为NA分支计算增长率,遵循dplyr管道规范直接引用列名:
library(dplyr) df2 <- df %>% mutate( Difference = case_when( # Year3存在有效值时,用Year3与Year1的差值计算 !is.na(Year3) ~ (Size3 - Size1)/(Year3 - Year1), # Year3为NA时,用Year2与Year1的差值计算 TRUE ~ (Size2 - Size1)/(Year2 - Year1) ) )
输出结果
运行后得到的df2与你期望的结果完全一致:
| ID | Year1 | Year2 | Year3 | Size1 | Size2 | Size3 | Difference |
|---|---|---|---|---|---|---|---|
| A | 2021 | 2022 | NA | 10 | 15 | NA | 5 |
| B | 2022 | 2023 | 2024 | 20 | 21 | 25 | 2.5 |
| C | 2021 | 2022 | NA | 5 | 20 | NA | 15 |
补充说明
case_when按顺序匹配条件,优先执行第一个满足的分支- 若后续需处理更复杂的缺失场景,只需在
case_when中添加新的条件分支即可
内容的提问来源于stack exchange,提问作者fishing4wall3y3
相关产品推荐
相关产品推荐

