簡體   English   中英

在帶有動態變量的 R 中使用 dplyr 匯總

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM