[英]Using dplyr summarise in R with dynamic variable
我試圖在 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年,從包rlang這個tidyeval工具。 特別是,如果使用字符串,您可以使用.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 年,您需要標准評估函數lazyeval::interp()
summarise_()
和lazyeval::interp()
。 這在 2020 年仍然有效,但已被棄用。
library(lazyeval)
cars %>%
group_by_("speed") %>%
summarise_(Sum = interp(~sum(var, na.rm = TRUE), var = as.name(GraphVar)),
Count = ~n() )
按名稱引用一列或多列的最新用法似乎是
cars %>% group_by(across("speed")) %>% ...
cars %>% group_by(across(c("speed", "dist"))) %>% ...
見vignette("colwise")
,部分Other verbs
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.