gpt4 book ai didi

r - 在带有动态变量的 R 中使用 dplyr 汇总

转载 作者:行者123 更新时间:2023-12-03 15:38:31 25 4
gpt4 key购买 nike

我试图在 R 中使用来自 dplyr 的汇总和分组,但是当我使用变量代替显式调用汇总列时,它使用每一行的整个数据集的 dist 总和,而不是正确分组。这可以从下面的 TestBad 和 TestGood 之间的差异中很容易看出。我只是希望能够像在 TestBad 中一样使用 GraphVar 变量复制 TestGood 的结果。

    require("dplyr")
GraphVar <- "dist"

TestBad <- summarise(group_by_(cars,"speed"),Sum=sum(cars[[GraphVar]],na.rm=TRUE),Count=n())

testGood <- summarise(group_by_(cars,"speed"),Sum=sum(dist,na.rm=TRUE),Count=n())

谢谢!

最佳答案

2020 年 2 月,包 中提供了用于此的 tidyeval 工具。 rlang .特别是,如果使用字符串,您可以使用 .data代词。

library(dplyr)
GraphVar = "dist"
cars %>%
group_by(.data[["speed"]]) %>%
summarise(Sum = sum(.data[[GraphVar]], na.rm = TRUE),
Count = n() )

虽然它们将在 中被取代(但不会被弃用) dplyr 1.0.0,作用域助手 *_at()函数在处理字符串时很有用。
cars %>%
group_by_at("speed") %>%
summarise_at(.vars = vars(GraphVar),
.funs = list(Sum = ~sum(., na.rm = TRUE),
Count = ~n() ) )

2016 年您需要标准评估函数 summarise_()连同 lazyeval::interp() .这在 2020 年仍然有效,但已被弃用。
library(lazyeval)
cars %>%
group_by_("speed") %>%
summarise_(Sum = interp(~sum(var, na.rm = TRUE), var = as.name(GraphVar)),
Count = ~n() )

关于r - 在带有动态变量的 R 中使用 dplyr 汇总,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39252405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com