r - dplyr“加权和”和cross()
问题描述
我已经在这里问了一个与此类似的问题,答案如下。我想按“数字”聚合我的数据框并计算加权平均值。现在我想做一个加权和,但不知何故我不知道如何将加权和应用于我的数据框。weighted.sum 函数不再适用于我的 R 版本。
df = data.frame(number=c("a","a","a","b","c","c"), y=c(1,2,3,4,1,7),
z=c(2,2,6,8,9,1), weight =c(1,1,3,1,2,1))
df %>%
group_by(number) %>%
summarise(across(c(y, z),
list( mean = ~mean(., na.rm = TRUE), sd = ~sd(., na.rm = TRUE),
weighted = ~weighted.mean(., w = weight))), .groups = 'drop')
解决方案
我们可以使用
library(dplyr)
df %>%
group_by(number) %>%
summarise(across(c(y, z),
list( mean = ~mean(., na.rm = TRUE),
sd = ~sd(., na.rm = TRUE),
weighted = ~weighted.mean(., w = weight),
weightedsum = ~ sum(. * weight)), .groups = 'drop'))
# A tibble: 3 x 9
# number y_mean y_sd y_weighted y_weightedsum z_mean z_sd z_weighted z_weightedsum
# <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 a 2 1 2.4 12 3.33 2.31 4.4 22
#2 b 4 NA 4 4 8 NA 8 8
#3 c 4 4.24 3 9 5 5.66 6.33 19
推荐阅读
- python - 具有 2 个不同 Websocket API 的不同行为
- outlook-redemption - 从 Windows 服务使用 Outlook 兑换
- api - 即使 JSON 路径有效,karate.jsonPath 也不起作用
- c# - 如何查询带有子表集合的视图?
- python - 有没有办法在 Ubuntu/linux 系统中使用 Window 编译的 dll 到 python 脚本中?
- java - 如何模拟 inetaddress.getlocalhost().gethostname() 抛出异常
- r - R Shiny:向数据表添加新列
- r - 基于具有相同维度 (R) 的另一个表为数据透视表创建自定义格式
- java - Spring Boot Broker-Consumer 项目出错
- node.js - NodeJS - 将数据传递给 httpRequest