【发布时间】:2019-11-27 23:16:37
【问题描述】:
我正在尝试编写一个函数,以便我可以输入要在整体级别和分组变量中描述的任何列。
但是,我无法获得分组结果的输出。
我的数据:
df <- data.frame(gender=c("m", "f", "m","m"), age=c("18-22","23-32","23-32","50-60"), income=c("low", "low", "medium", "high"), group=c("A", "A", "B", "B"))
> df
gender age income group
1 m 18-22 low A
2 f 23-32 low A
3 m 23-32 medium B
4 m 50-60 high B
功能:
library(dplyr)
make_sum <- function(data=df, cols, group_var) {
data %>% dplyr::select(cols) %>%
# print tables with frequency and proportions
apply(2, function(x) {
n <- table(x, useNA = "no")
prop=round(n/length(x[!is.na(x)])*100,2)
print(cbind(n, prop))
})
# print tables by group
data %>% dplyr::select(cols, vars(group_var)) %>%
apply(2, function(x) {
n <- table(x, vars(group_var),useNA = "no")
print(n)
})
}
cols <- df %>% dplyr::select(gender,age, income) %>% names()
make_sum(data=df, cols=cols, group_var="group")
我得到了整个表格的正确输出,但没有分组,显示此错误:
Error: `vars(group_var)` must evaluate to column positions or names, not a list
分组性别变量的期望输出(示例):
A B
f 1 0
m 1 2
【问题讨论】:
-
vars包装器在 tidyverse 函数中工作,您在base R上调用它
标签: r