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

dplyr中mutate用which.max()遇全NA行返回integer(0)而非NA的解决方法

解决dplyr中计算每行最大值列位置时全NA行报错的问题

方法一:在mutate中直接加入条件判断

通过检测当前行是否全为NA,针对性返回结果,避免which.max()返回空整数向量引发的报错:

data.frame(v1 = c(3,2,NA,6,NA),
           v2 = c(NA,1,6,7,NA),
           v3 = c(1,1,NA,1,NA)) -> df1

df1 %>%
  rowwise %>%
  mutate(maxCol = if(all(is.na(c_across(everything())))) NA_integer_ else which.max(c_across(everything())))

方法二:自定义可复用函数

将全NA判断逻辑封装成函数,让代码更整洁,适合多次调用的场景:

# 定义处理函数:全NA行返回NA,否则返回最大值所在列位置
which_max_na <- function(x) {
  if(all(is.na(x))) NA_integer_ else which.max(x)
}

df1 %>%
  rowwise %>%
  mutate(maxCol = which_max_na(c_across(everything())))

关键说明

  • all(is.na(c_across(everything())))用于精准检测当前行是否所有值均为NA;
  • 使用NA_integer_确保返回值为整数类型的NA,避免新变量出现类型不一致问题;
  • 两种方法都保留了which.max()忽略部分NA的原有逻辑,仅对全NA行做特殊处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 17:45:05