2016-12-26 73 views
2

我試圖將以下代碼正常工作轉換爲函數。dcast和彙總到函數中 - 參數丟失

result_check <- data %>% 
    group_by(column, target) %>% 
    summarise(Unique_Elements = n()) %>% 
    dcast(column_code ~ target, value.var="Unique_Elements") 

例如,如果我們採取以下數據集:

column1 target 
    AA  YES 
    BB  NO 
    BC  NO 
    AA  YES 

的代碼會做總數據集按目標變量,就像這樣:

column1 YES NO 
    AA  2 0 
    BB  0 1 
    BC  0 1 

這是我如何構建功能:

aggregate_per_group <- function(column) { 
data %>% 
    group_by(column, target) %>% 
    summarise(Unique_Elements = n()) %>% 
    dcast(column ~ target, value.var="Unique_Elements")} 

但我得到 - 錯誤:未知變量按分組:列。我知道它的一個基本問題,但是爲什麼我放棄了group_by中的論點的任何線索?

我曾嘗試使用以下imlementation「group_by_」以及「require(」dplyr「)」,但它們似乎無關。

+2

可能的重複[簡單的方法來轉換長寬格式與計數在R](http://stackoverflow.com/questions/34417973/easy-way-to-convert-long-to-wide-format -with-counts-in-r) –

+1

感謝您的反饋。其實,正如我所解釋的......我在功能的構建方面存在問題。不是重塑本身。所以我不認爲它是你指出的問題的重複。 – Prometheus

回答

2

我們可以使用tablebase R

table(data) 

如果我們有興趣在一個函數,然後使用與spread沿group_by_tidyr

aggregate_per_group <- function(column) { 
    data %>% 
     group_by_(column, "target") %>% 
     summarise(Unique_Elements = n()) %>% 
     spread(target, Unique_Elements, fill = 0) 
} 

library(dplyr) 
library(tidyr) 
aggregate_per_group("column1") 
# column1 NO YES 
# * <chr> <dbl> <dbl> 
#1  AA  0  2 
#2  BB  1  0 
#3  BC  1  0 

如果我們需要的dcastreshape2

library(reshape2) 
aggregate_per_group <- function(column) { 
    data %>% 
     group_by_(column, "target") %>% 
     summarise(Unique_Elements = n()) %>% 
     dcast(data = ., paste(column, '~ target'), 
       value.var="Unique_Elements", fill = 0) 
} 

aggregate_per_group("column1") 
# column1 NO YES 
#1  AA 0 2 
#2  BB 1 0 
#3  BC 1 0 
+1

謝謝你的幫助。你有什麼想法如何實現沒有tidyr功能?我無法在R studio服務器上使用該庫。 – Prometheus

+0

@Prometheus更新了'dcast'的帖子。 – akrun

+1

工程很棒。感謝您的時間和精力! – Prometheus