2016-09-21 63 views
1

我其實有兩個相關的問題。R - dplyr函數計數lazyeval錯誤

第一個涉及函數中dplyr::count的包含。 我正在寫一個函數來計算比例(%)。 功能完美的作品,當我用group_by,如

library(dplyr) 
library(lazyeval) 

dprop = function(data, ...) { 
    data %>% group_by_(.dots = lazyeval::lazy_dots(...))%>% 
    summarise(n = n()) %>% 
    mutate(n = n/sum(n)) 
} 

(在隨機數據集)

mtcars %>% dprop(am, gear) 

    am gear   n 
    <dbl> <dbl>  <dbl> 
1  0  3 0.7894737 
2  0  4 0.2105263 
3  1  4 0.6153846 
4  1  5 0.3846154 

然而,當我把它寫使用count,這是行不通的

dprop2 = function(data, ...) { 
    data %>% 
    count_(.dots = lazyeval::lazy_dots(...)) %>% 
    mutate(n = n/sum(n)) 
} 

爲什麼?

第二個問題涉及在函數中包含第二個grouping。有時計算比例時,我需要改變基地

group_by_(.dots = lazyeval::lazy_dots(...)) %>% 
     summarise(n = n()) %>% 
     group_by(UNIQUEVAR) %>% 
     mutate(n = n/sum(n)) 

我想包括在函數另一個變量,但它不工作

dprop = function(data, UNIQUEVAR, ...) { 
    data %>% group_by_(.dots = lazyeval::lazy_dots(...)) %>% 
    summarise(n = n()) %>% 
    group_by_(.dots = lazyeval::lazy(UNIQUEVAR)) %>% 
    mutate(n = n/sum(n)) 
} 

什麼想法?

+1

在計數你應該使用'vars'不'.dots'。第二個你想用mutate而不是總結?使用總結下降變量,包括最終'UNIQUEVAR' – rawr

+0

你能告訴我一個例子嗎?謝謝 – giacomo

回答

0

我終於找到

隨着count

dprop = function(data, ...) { 
    data %>% 
    count_(vars = lazyeval::lazy_dots(...)) %>% 
    mutate(n = n/sum(n)) 
} 

和不同的分組

dprop_group = function(data, ...) { 
    data %>% 
    count_(vars = lazyeval::lazy_dots(...)) %>% 
    mutate(n = n/sum(n)) %>% 
    group_by(group_col) %>% 
    summarise(n = n()) 
}