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

dplyr行求和时where(is.numeric)失效问题求助

问题解决:行方向求和数值型变量

你的代码里sum(where(is.numeric))无效的原因是:where(is.numeric)是dplyr的列选择语法,仅能在支持tidy select的函数(比如select()、across())中使用,sum()本身不识别这个语法,所以无法正确筛选列进行求和。

下面提供两种可行的解决方法:

方法1:使用rowwise() + c_across()

在rowwise()的上下文里,用c_across()包裹列选择器,就能正确选取每行的数值型列并求和:

library(dplyr)

vital1 <- data.frame(
  a_team = c(1:3), 
  b_team = c(2:4),
  team_league = c('dd','ee','ff'),
  c_team = c(5,9,1)
) %>%
  rowwise() %>% 
  mutate(league_points = sum(c_across(where(is.numeric)), na.rm = TRUE)) %>%
  ungroup() # 完成行操作后取消分组,避免后续操作性能下降
  • c_across()是dplyr专门为行级操作设计的函数,支持tidy select语法
  • 加上na.rm = TRUE可以避免因缺失值导致求和结果为NA(可选,根据你的数据情况调整)

方法2:使用rowSums()(更高效)

如果你的数据集较大,rowwise()的性能会比较差,推荐直接用rowSums()配合select()筛选数值列:

library(dplyr)

vital1 <- data.frame(
  a_team = c(1:3), 
  b_team = c(2:4),
  team_league = c('dd','ee','ff'),
  c_team = c(5,9,1)
) %>%
  mutate(league_points = rowSums(select(., where(is.numeric)), na.rm = TRUE))
  • select(., where(is.numeric))先筛选出所有数值型列
  • rowSums()直接对筛选后的列做行方向求和,无需分组,运行速度更快

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 17:55:31