我试图编写一个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
它只是告诉我该列中的案例数量。有谁知道我在哪里出错?
答案 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