如何应用多列来制作 R 中数据框的摘要列表
How to apply multiple columns to make a summary list of dataframes in R
我正在尝试自动执行此代码,但不知道如何使用 apply 或 map 函数来完成它!
这是设置:
data("mtcars")
count_to_pct <- function(data,..., col = n) {
grouping_vars_expr<- quos(...)
col_expr<- enquo(col)
data %>%
group_by(!!! grouping_vars_expr) %>%
mutate(pct = (!! col_expr) / sum(!! col_expr)) %>%
ungroup()
}
问题来了:重复代码!为了我自己的理智而试图清理它。如何通过 data %>% count(column) %>% count_to_pct()
传递列表?
dataframes<- list(
mtcars %>% count(vs) %>% count_to_pct(),
mtcars %>% count(am) %>% count_to_pct(),
mtcars %>% count(gear) %>% count_to_pct(),
mtcars %>% count(carb) %>% count_to_pct())
获取长格式数据,count
,拆分每个 name
并使用 count_to_pct
library(dplyr)
library(tidyr)
library(purrr)
mtcars %>%
pivot_longer(cols = c(vs, am, gear, carb)) %>%
count(name, value) %>%
group_split(name) %>%
map(count_to_pct)
如果不使用count_to_pct
函数,其实会简单很多。
mtcars %>%
pivot_longer(cols = c(vs, am, gear, carb)) %>%
count(name, value) %>%
group_by(name) %>%
mutate(n = n/sum(n))
# name value n
# <chr> <dbl> <dbl>
# 1 am 0 0.594
# 2 am 1 0.406
# 3 carb 1 0.219
# 4 carb 2 0.312
# 5 carb 3 0.0938
# 6 carb 4 0.312
# 7 carb 6 0.0312
# 8 carb 8 0.0312
# 9 gear 3 0.469
#10 gear 4 0.375
#11 gear 5 0.156
#12 vs 0 0.562
#13 vs 1 0.438
如果你通过字符名来引用你的列名,你可以使用lapply
和rlang::sym
将字符名转换为可以在dplyr
中使用的列符号,见 :
dataframes_list <- lapply(c("vs", "am", "gear", "carb"), function(x) {
mtcars %>% count(!!rlang::sym(x)) %>% count_to_pct()
})
我正在尝试自动执行此代码,但不知道如何使用 apply 或 map 函数来完成它!
这是设置:
data("mtcars")
count_to_pct <- function(data,..., col = n) {
grouping_vars_expr<- quos(...)
col_expr<- enquo(col)
data %>%
group_by(!!! grouping_vars_expr) %>%
mutate(pct = (!! col_expr) / sum(!! col_expr)) %>%
ungroup()
}
问题来了:重复代码!为了我自己的理智而试图清理它。如何通过 data %>% count(column) %>% count_to_pct()
传递列表?
dataframes<- list(
mtcars %>% count(vs) %>% count_to_pct(),
mtcars %>% count(am) %>% count_to_pct(),
mtcars %>% count(gear) %>% count_to_pct(),
mtcars %>% count(carb) %>% count_to_pct())
获取长格式数据,count
,拆分每个 name
并使用 count_to_pct
library(dplyr)
library(tidyr)
library(purrr)
mtcars %>%
pivot_longer(cols = c(vs, am, gear, carb)) %>%
count(name, value) %>%
group_split(name) %>%
map(count_to_pct)
如果不使用count_to_pct
函数,其实会简单很多。
mtcars %>%
pivot_longer(cols = c(vs, am, gear, carb)) %>%
count(name, value) %>%
group_by(name) %>%
mutate(n = n/sum(n))
# name value n
# <chr> <dbl> <dbl>
# 1 am 0 0.594
# 2 am 1 0.406
# 3 carb 1 0.219
# 4 carb 2 0.312
# 5 carb 3 0.0938
# 6 carb 4 0.312
# 7 carb 6 0.0312
# 8 carb 8 0.0312
# 9 gear 3 0.469
#10 gear 4 0.375
#11 gear 5 0.156
#12 vs 0 0.562
#13 vs 1 0.438
如果你通过字符名来引用你的列名,你可以使用lapply
和rlang::sym
将字符名转换为可以在dplyr
中使用的列符号,见
dataframes_list <- lapply(c("vs", "am", "gear", "carb"), function(x) {
mtcars %>% count(!!rlang::sym(x)) %>% count_to_pct()
})