如何编写R函数实现列表所有元素及多变量同时聚合操作
实现方案
以下两种写法都可以实现你的需求,第一种完全匹配你预设的lapply处理逻辑,第二种是tidyverse生态内更简洁的原生写法:
方法1:按lapply逻辑实现
如果你需要坚持先转列表再批量处理的逻辑,写法如下:
# 接你已有的代码 dat_ls <- as.list(dat) # 对每个变量单独作为分组键统计频数,和你单变量聚合的输出结构完全一致 dat_agg <- lapply(names(dat_ls), function(col) { dat %>% group_by(!!sym(col)) %>% summarise(n = n()) }) # 给列表元素命名,方便后续调用对应变量的聚合结果 names(dat_agg) <- names(dat)
运行后dat_agg为列表结构,每个子元素对应原数据一列的聚合统计结果,和你单变量执行group_by+summarise的输出格式完全一致。
方法2:tidyverse原生更简洁的写法
实际不需要手动转列表调用lapply,dplyr的across()函数本身就是用来批量处理多列的,代码更简洁易读:
# 一次性得到所有变量的聚合结果,合并为结构化数据框 library(tidyr) dat_agg_all <- dat %>% summarise(across(everything(), ~ as.list(table(.x)))) %>% pivot_longer(everything(), names_to = "变量名", values_to = "频数统计")
内容的提问来源于stack exchange,提问作者kyg
相关产品推荐
相关产品推荐

