尝试在 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/