2016-09-21 64 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()) 
}