TransWikia.com

Weighted mean with summarise_at dplyr

Data Science Asked by 3nomis on January 4, 2021

I strictly need to use the summarise_at to compute a weighted mean, with weights based on the values of another column

    df %>% summarise_at(.vars = vars(FACTOR,tv:`smart tv/console`), 
                  .funs = weighted.mean, w=INVESTMENT, na.rm=TRUE)

It always shows the error: 'INVESTMENT' is not found.

I then tried with:

df %>%summarise_at(.vars = vars(FACTOR,tv:`smart tv/console`), 
               .funs = weighted.mean, w=vars(INVESTMENT), na.rm=TRUE)

But in this case : Evaluation error: 'x' and 'w' must have the same length.

Why is this? Am I doing anything wrong? Do you have hints to solve this issue? Thanks

One Answer

You can specify the weights directly within the weighted.mean() function, within the call to funs() like so:

data.frame(x=rnorm(100), y=rnorm(100), weight=runif(100)) %>%
      summarise_at(vars(x,y), funs(weighted.mean(., w=weight)))

Answered by mmk on January 4, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP