【问题标题】:use of other columns as arguments to function in summarize_at()在 summarise_at() 中使用其他列作为函数的参数
【发布时间】:2018-03-20 22:16:17
【问题描述】:

这很好用:

> mtcars %>% group_by(cyl) %>% summarize_at(vars(disp, hp), weighted.mean)
# A tibble: 3 x 3
    cyl  disp    hp
  <dbl> <dbl> <dbl>
1  4.00   105  82.6
2  6.00   183 122  
3  8.00   353 209  

但现在我想使用 mtcars 中的一列作为 weighted.mean 的 w 参数。可悲的是,明显的尝试失败了:

> mtcars %>% group_by(cyl) %>% summarize_at(vars(disp, hp), weighted.mean, w = wt)
Error in dots_list(...) : object 'wt' not found

尽管 wt 确实是 mtcars 的一部分。如何使用其他列作为 summarise_at() 中函数的参数?

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    你可以试试funs() 语法:

    mtcars %>% group_by(cyl) %>% 
            summarize_at(vars(disp, hp), funs(weighted.mean(.,wt)))
    #    cyl  disp    hp
    #  <dbl> <dbl> <dbl>
    #1  4.00   110  83.4
    #2  6.00   185 122  
    #3  8.00   362 209  
    

    【讨论】:

    • 希望对funs 的工作原理有更多解释!它在哪里评估包装函数,以便知道为wt 使用正确的组?我通常使用function(x)~ 公式表示法,但在这种情况下都不起作用,我认为是因为group_by
    • 使用多个参数和分组,您需要将摘要函数包装在funs() 中,否则不会为每个组评估额外的参数。请参阅?summarise_at 了解更多信息。
    • 谢谢!像魅力一样工作。
    • 从 dplyr 0.8.0 开始,似乎 funs() 已被软性弃用。关于如何在不使用 funs() 的情况下执行此操作的任何其他想法?
    猜你喜欢
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 2018-08-15
    • 2018-05-03
    • 2019-03-11
    • 2019-10-30
    • 1970-01-01
    • 2020-06-12
    相关资源
    最近更新 更多