R 在函数参数中选择列并按列分组
我试图编写一个函数,这样我就可以输入任何列,以便在总体级别和分组变量中进行描述 但是,我在获取分组结果的输出时遇到了问题 我的数据:R 在函数参数中选择列并按列分组,r,R,我试图编写一个函数,这样我就可以输入任何列,以便在总体级别和分组变量中进行描述 但是,我在获取分组结果的输出时遇到了问题 我的数据: 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
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
分组性别变量的期望输出(示例):
A B
f 1 0
m 1 2
这里可以调用所有的
摘要,而不是使用apply
和MARGIN=2
。另外,vars
wrapped与tidyverse函数一起应用。在这里,为了获得频率,一个选项是使用更直接的[
对列进行子集设置。此外,由于摘要
只返回一行(对于每个组-如果存在分组变量),我们可以将输出包装在列表中
make_sum <- function(data=df, cols, group_var) {
data %>%
dplyr::select(cols) %>%
summarise_all(~ {
n <- table(., data[[group_var]], useNA = "no")
#list(round(n/length(.[!is.na(.)])*100,2))
list(n)
})
}
cols <- df %>%
dplyr::select(gender,age, income) %>%
names()
out <- make_sum(data=df, cols=cols, group_var="group")
out$gender
#[[1]]
#. A B
# f 1 0
# m 1 2
make_sum%
dplyr::选择(列)%>%
总结所有内容(~{
n%
姓名()
在tidyverse函数中的vars
包装工作中,您正在base R
上调用它,这非常有效。我对函数进行了如下修改,以便在同一个表中打印比例(按列):make_sum%dplyr::select(cols)%%>%总结所有内容({n
A B
f 1 0
m 1 2
make_sum <- function(data=df, cols, group_var) {
data %>%
dplyr::select(cols) %>%
summarise_all(~ {
n <- table(., data[[group_var]], useNA = "no")
#list(round(n/length(.[!is.na(.)])*100,2))
list(n)
})
}
cols <- df %>%
dplyr::select(gender,age, income) %>%
names()
out <- make_sum(data=df, cols=cols, group_var="group")
out$gender
#[[1]]
#. A B
# f 1 0
# m 1 2