2017-06-20 133 views
2

我想使用dplyr的GROUP_BY在當地的功能,例如:在一個函數中使用dplyr GROUP_BY

testFunction <- function(df, x) { 
    df %>% 
group_by(x) %>% 
summarize(mean.Petal.Width = mean(Petal.Width)) 
} 

testFunction(iris, Species) 

,我得到一個錯誤「...未知變量按組:X」 我我試了group_by_,它給了我一個整個數據集的總結。 有人有線索我怎麼能解決這個問題?

提前致謝!

回答

1

這裏是與新enquodplyr,其中enquo取串並轉換爲quosure它獲取通過在group_by unquoting(UQ!!)來評價工作的一種方式,mutatesummarise

library(dplyr) 
testFunction <- function(df, x) { 
x <- enquo(x) 
    df %>% 
    group_by(!! x) %>% 
    summarize(mean.Petal.Width = mean(Petal.Width)) 
} 

testFunction(iris, Species) 
# A tibble: 3 x 2 
#  Species mean.Petal.Width 
#  <fctr>   <dbl> 
#1  setosa   0.246 
#2 versicolor   1.326 
#3 virginica   2.026 
+1

很酷。這很有用,非常感謝。你有一個參考網址涵蓋了這個? – RoseS

+0

@RoseS你可以查看[這裏](http://dplyr.tidyverse.org/articles/programming.html#quoting) – akrun

0

我得到了它這樣的工作:

testFunction <- function(df, x) { 
         df %>% 
         group_by(get(x)) %>% 
         summarize(mean.Petal.Width = mean(Petal.Width)) 
       } 

testFunction(iris,"Species") 

我改變xget(x),並Species"Species"testFunction(iris,...)

+0

我嘗試了20件事,所以不要問我爲什麼這麼做...;) – CPak

+0

嗯,我認爲'get(x)'有幫助......它似乎明白了現在要分組的東西。現在,我收到錯誤「.... object」Species「not found」,所以在調用函數時我無法使用或不使用引號。你有一個想法,爲什麼這可能適合你?哈!我剛剛看到「...不要問我它是如何工作的」 – RoseS

+0

你有沒有'dplyr'加載?更新'dplyr'?你也可以嘗試'akrun'答案...應該是相當的。 – CPak