函数不以预期的方式评估变量

时间:2017-07-03 13:52:08

标签: r function frequency tidyverse nse

我试图编写一个R函数来生成频率表,这样我就可以标准化格式化等,而无需反复输入。唯一的问题是我无法正确评估分组变量。

以下是获取迷你数据集以重现问题的一些代码:

 library(tidyverse)
 id <- sample(1:500, 5)
 factors <- sample(1:3, 5, replace = TRUE)
 data <- data.frame(id, factors)
 freqTable <- function(x, field){

     Table <- x %>%
         group_by(field) %>%
         summarise(N = n(), Percent = n()/NROW(x)*100) %>%
         mutate(C.Percent = cumsum(Percent))
     return(Table)
 }
 freqTable(data, "factors")

结果是:

  

resolve_vars(new_groups,tbl_vars(.data))出错:未知   变量分组依据:field来自:resolve_vars(new_groups,   tbl_vars(。数据))

我也尝试过:

freqTable <- function(x, field){
     Table <- x %>%
            group_by(paste(field)) %>%
            summarise(N = n(), Percent = n()/NROW(x)*100) %>%
            mutate(C.Percent = cumsum(Percent))
  return(Table)
}

哪个更好一点(因为它没有错误),但仍然没有正确地对因子进行分组,输出:

# A tibble: 1 × 4
  `paste(field)`     N Percent C.Percent
           <chr> <int>   <dbl>     <dbl>
1        factors     5     100       100

它只是告诉我该列中的案例数量。有谁知道我在哪里出错?

1 个答案:

答案 0 :(得分:1)

抱歉 - 刚刚想出这个。

group_by_(field)

我认为这可能与非标准评估有关,但我对此并不太了解。

此:

freqTable <- function(x, field){
+      Table <- x %>%
+             group_by_(paste(field)) %>%
+             summarise(N = n(), Percent = n()/NROW(x)*100) %>%
+             mutate(C.Percent = cumsum(Percent))
+   return(Table)
+ }

现在给出这个:

> freqTable(data, "factors")
# A tibble: 2 × 4
  factors     N Percent C.Percent
    <int> <int>   <dbl>     <dbl>
1       2     2      40        40
2       3     3      60       100