dplyr在列有时丢失时跨列汇总

jm81lzqq  于 2023-01-06  发布在  其他
关注(0)|答案(2)|浏览(86)

这是可行的:

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把它应用到一个列表中的一大堆 Dataframe 上,其中d几乎一直存在,所以我不能只删除d。
我想表达的是:

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))
lg40wkob

lg40wkob1#

您已经接近目标,any_of需要一个字符向量:

library(dplyr)

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
#> 1 6 9 8

reprex package(v1.0.0)于2023年1月3日创建

b09cbbtk

b09cbbtk2#

另一种仅汇总现有数字列的方法:

library(dplyr)
df |> summarise(across(where(is.numeric), ~ sum(.x, na.rm = TRUE)))

相关问题