summarise 和 summarise_at 结果之间的差异 - R 语言

问题描述 投票:0回答:1

我有一个如下所示的数据集:

a <- data.frame(cat = c("a","b","b","c","a","c"),
           num1 = c(-2,1,2,4,3,2),
           num2 = c(-2,3,1,5,3,2),
           weight = c(3.12,2,14,1.12,1,12))

我试图获得每个“num”列的加权平均值(在我的真实数据集上,我有许多“num”列,全部命名相同)。

我开始这样编码:

a %>% summarise(num1 = weighted.mean(num1,weight,na.rm=T),
                num2 = weighted.mean(num2,weight,na.rm=T))

回报:

数字1 数字2
1.661853 1.394705

但是由于我必须处理许多列,所以我采用了这种方式:


a %>% summarise(across(contains("num"), ~weighted.mean(.x,na.rm=T)))

或:

a %>% summarise_at(.vars=vars(contains("num")),
                   function(x,weight) weighted.mean(x,weight))

他们都回来了:

数字1 数字2
1.666667 2

为什么我在这里得到不同的结果?我应该相信哪种方式?

谢谢!

r tidyverse
1个回答
1
投票

您在第二个选择中错过了

weight
,请尝试:

a %>% 
  summarise(across(contains("num"), ~weighted.mean(.x, weight, na.rm=TRUE)))
     num1     num2
1 1.661853 1.394705

这是第三种方法的替代方法:

a %>% 
  summarise_at(.vars=vars(contains("num")),
                   function(x,weight) weighted.mean(x, w=.$weight, na.rm=TRUE))
      num1     num2
1 1.661853 1.394705
© www.soinside.com 2019 - 2024. All rights reserved.