R - dplyr函数计数lazyeval错误

时间:2016-09-21 17:52:13

标签: r dplyr

我实际上有两个相关的问题。

第一个涉及函数中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。有时在计算比例时,我需要更改 base ,例如

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 个答案:

答案 0 :(得分: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())
}