1

我正在尝试编写一个 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)) 中的错误:要分组的未知变量:字段调用自:resolve_vars(new_groups, tbl_vars(.data))

我也试过:

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

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

4

1 回答 1

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
于 2017-07-03T13:55:24.470 回答