r - 在R(dplyr包)中使用weighted_mean和summarise_at时出错

标签 r dplyr

尝试在 R(dplyr 包)中使用 weighted_mean 作为 summarise_at 的聚合函数时收到以下错误消息:

Error in summarise_impl(.data, dots) : Evaluation error: 'x' and 'w' must have the same length.

这是我的代码:

a = data.frame(snapshot_date = c("1-Jan-2016", "1-Jan-2016", "1-Feb-2016", "1-Feb-2016"),
           rate = c(0.75, 0.2, 0.5, 0.1),
           newrate = c(0.9, 0.4, 0.6, 0.3),
           balance = c(1000,2000,3000,4000))
b = a %>%
  group_by(snapshot_date)

summarise_at(.tbl = b,
            .vars = c("rate", "newrate"),
           .funs = weighted.mean, 
           w = b$balance, na.rm = FALSE)

当我删除权重参数时,我不再收到错误消息,并且得到正确(未加权)的结果,如下所示:

summarise_at(.tbl = b,
         .vars = c("rate", "newrate"),
         .funs = weighted.mean, 
         na.rm = FALSE)

产量:

# A tibble: 2 x 3
  snapshot_date  rate newrate
  <fct>         <dbl>   <dbl> 
1 1-Feb-2016    0.300   0.450
2 1-Jan-2016    0.475   0.650
> 

尝试使用权重时我做错了什么?

最佳答案

不幸的是,不确定到底哪里出了问题,但这样就可以了

b = a %>%
  group_by(snapshot_date) %>%
  summarise_at(vars(rate, newrate), funs(weighted.mean(., balance)))

# A tibble: 2 x 3
  snapshot_date  rate newrate
  <fct>         <dbl>   <dbl>
1 1-Feb-2016    0.271   0.429
2 1-Jan-2016    0.383   0.567

关于r - 在R(dplyr包)中使用weighted_mean和summarise_at时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48889349/

相关文章:

r - 链接 R 中同一时间窗口内发生的值

r - 使用 dplyr 进行交互频率计数,必须包括零计数

r - 消除每组内的 NA

r - 利用变量值/类型来重命名列

r - 有什么解决方法可以对混合数据类型进行聚类并在 R 中渲染 3D 散点图吗?

html - DT & Shiny : make header borders more pronounced

R plot data.frame 以获得更有效的数据概览

R逐行乘法 - 重新设计?

r - 确定嵌套列表是否在 R 中包含所有 NA 值时出现 sapply 问题

r - 您能否解释一下为什么名称(df)在 dfplyr::arrange() 中不起作用