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

如何在dplyr的summarise across中处理有时缺失的列?

处理跨数据框的列求和(部分列可能不存在)

正常运行的情况

如果指定的列都在数据框里,这段代码能正常算出各列的总和:

df <- data.frame(a=c(1,2,3),b=c(4,2,3),c=c(2,5,1))

df %>% summarise(across( c(a,b,c), sum, na.rm=TRUE))

触发报错的情况

要是指定了数据框里没有的列(比如下面的d列),代码直接就报错了:

df <- data.frame(a=c(1,2,3),b=c(4,2,3),c=c(2,5,1))

df %>% summarise(across( c(a,b,c,d), sum, na.rm=TRUE))

实际需求

这段代码是某个函数的一部分,我要用lapply把它套在一堆数据框组成的列表上。其中d列几乎每个数据框都有,所以不能直接把它从列列表里删掉。我想要的效果是:不管列列表里的列存不存在,只对实际存在的列求和,不存在的自动跳过。

解决办法

用dplyr里的any_of()函数就行,注意要把列名写成字符串向量(不能直接写裸列名,不然不存在的列会先触发报错),代码如下:

df <- data.frame(a=c(1,2,3),b=c(4,2,3),c=c(2,5,1))

df %>% summarise(across( any_of(c("a","b","c","d")), sum, na.rm=TRUE))

这段代码会自动识别数据框里存在的列(这里就是a、b、c)并计算总和,完全忽略不存在的d列,不会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:50:50