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

如何在R中对指定前缀列按行求和且灵活处理NA值?

解决方案

针对你的需求,推荐两种高效实现方式,优先选择向量运算方案适配大型数据集:

方案一:基于rowSums的高效实现(推荐)

利用rowSums的向量运算特性快速求和,再通过if_all判断全NA行并修正结果,兼顾效率与需求:

library(dplyr)

df <- df %>%
  mutate(
    # 先忽略NA完成求和
    a1_sum = rowSums(select(., starts_with('a1')), na.rm = TRUE),
    # 若前缀匹配的所有列均为NA,将求和结果替换为NA
    a1_sum = if_else(if_all(starts_with('a1'), is.na), NA_real_, a1_sum)
  )

方案二:基于rowwise的直观实现

如果更看重代码可读性,可使用rowwise结合c_across,但该方式在大型数据集上效率低于方案一:

df <- df %>%
  rowwise() %>%
  mutate(
    a1_sum = case_when(
      all(is.na(c_across(starts_with('a1')))) ~ NA_real_,
      TRUE ~ sum(c_across(starts_with('a1')), na.rm = TRUE)
    )
  ) %>%
  ungroup()

为什么hablar::sum_效率低?

hablar::sum_本质是逐行循环处理,没有利用R的向量运算优化机制,在大型数据集上会导致计算耗时剧增,因此不推荐用于此类场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:45:28