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

如何在dplyr的mutate中添加含NA的final_score求和列?

解决方案:在同一mutate中生成final_score列

核心逻辑

在同一个mutate块中,先完成col_scr和grd_scr的生成,再通过**rowSums+条件判断**实现NA求和规则:单个NA与数值相加取数值,双NA则保留NA。

完整代码示例

library(dplyr)

# 构造带NA的测试数据框
df <- tibble(
  id = 1:5,
  color = c("red", "blue", NA, "red", NA),
  grade = c("A", NA, "B", NA, NA)
)

# 一次性完成三列生成的mutate代码
df_processed <- df %>%
  mutate(
    # 生成col_scr(示例规则,可根据实际需求修改)
    col_scr = case_when(
      color == "red" ~ 10,
      color == "blue" ~ 20,
      TRUE ~ NA_real_
    ),
    # 生成grd_scr(示例规则,可根据实际需求修改)
    grd_scr = case_when(
      grade == "A" ~ 30,
      grade == "B" ~ 20,
      TRUE ~ NA_real_
    ),
    # 生成final_score:处理NA求和规则
    final_score = ifelse(
      is.na(col_scr) & is.na(grd_scr),  # 判断是否双NA
      NA_real_,  # 双NA返回NA
      rowSums(cbind(col_scr, grd_scr), na.rm = TRUE)  # 单NA时忽略NA求和
    )
  )

代码说明

  • rowSums(cbind(col_scr, grd_scr), na.rm = TRUE):自动忽略单个NA,仅对存在的数值求和;
  • 外层ifelse专门处理双NA场景,避免rowSums将双NA转换为0;
  • 所有计算在同一个mutate块内完成,无需拆分步骤。

输出结果

df_processed
#> # A tibble: 5 × 6
#>      id color grade col_scr grd_scr final_score
#>   <int> <chr> <chr>   <dbl>   <dbl>       <dbl>
#> 1     1 red   A          10      30          40
#> 2     2 blue  NA         20      NA          20
#> 3     3 NA    B          NA      20          20
#> 4     4 red   NA         10      NA          10
#> 5     5 NA    NA         NA      NA          NA

内容的提问来源于stack exchange,提问作者learner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 14:18:15