【问题标题】:'Not Found' Error for weight trying to calculate weighted average with dplyr summarize_all尝试使用 dplyr summary_all 计算加权平均值时出现“未找到”错误
【发布时间】:2017-09-29 13:34:03
【问题描述】:

我正在尝试使用 dplyr 和 summarise_all 计算加权平均值。我见过类似的问题,最具体地说是这篇文章: How do I compute weighted average using summarise_each?

这看起来很简单,但我不断收到 object 'weight' not found 错误消息。

这是一个可重现的例子:

data <- tibble::tribble(~group, ~weight, ~x1, ~x2,
                    1, 1, 3, 2,
                    1, 1, 4, 7,
                    1, 1, 1, 4,
                    2, 1, 2, 2,
                    2, 1, 5, 3,
                    2, 1, 4, 2)

# Just regular means
data %>%
      dplyr::group_by(group) %>%
      dplyr::summarize_all(mean)

# First attempt
data %>%
      dplyr::group_by(group) %>%
      dplyr::summarize_all(weighted.mean(., weight))

# Second attempt based on syntax from post above
data %>%
      dplyr::group_by(group) %>%
      dplyr::summarize_all(funs(weighted.mean(., weight)), -weight)

这就是我运行这段代码时发生的情况:

> data %>%
+   dplyr::group_by(group) %>%
+   dplyr::summarize_all(mean)
# A tibble: 2 x 4
  group weight       x1       x2
  <dbl>  <dbl>    <dbl>    <dbl>
1     1      1 2.666667 4.333333
2     2      1 3.666667 2.333333
> 
> data %>%
+   dplyr::group_by(group) %>%
+   dplyr::summarize_all(weighted.mean(., weight))
Error in weighted.mean.default(., weight) : object 'weight' not found
> 
> data %>%
+   dplyr::group_by(group) %>%
+   dplyr::summarize_all(funs(weighted.mean(., weight)), -weight)
Error in eval_bare(dot$expr, dot$env) : object 'weight' not found

非常感谢任何有关为什么会发生这种情况以及我可以做些什么(如果有的话)的信息。

谢谢!

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    问题在于,通过使用summarize_all,您还试图计算weight 列的加权平均值。

    你可能对summarise_at更感兴趣:

    data %>%
      dplyr::group_by(group) %>%
      dplyr::summarize_at(vars(x1, x2), funs(weighted.mean(., weight)))
    
    # A tibble: 2 x 3
      group       x1       x2
      <dbl>    <dbl>    <dbl>
    1     1 2.666667 4.333333
    2     2 3.666667 2.333333
    

    【讨论】:

    • 非常感谢;我不熟悉summarize_at,但就是这样。我需要进一步了解这些额外的 dplyr 命令。
    猜你喜欢
    • 2021-12-08
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 2017-09-16
    • 1970-01-01
    • 2018-03-10
    相关资源
    最近更新 更多