如何将tapply生成的分位数输出转换为带分类名的data.frame或表格?
将tapply分位数输出转为带分类名称的data.frame
你可以用以下几种方法把tapply生成的分组分位数列表转换成保留人口区间分类的data.frame:
方法一:基础R实现
先把tapply的结果存入变量,再通过行合并、行名转列的方式处理:
# 保存tapply的结果到变量 quantile_result <- tapply( index_articles_migpunts$index_articles_ponderats2_migpunts, index_articles_migpunts$Tramspoblacio, quantile, probs = seq(.1, .9, by = .1) ) # 转换为data.frame并保留分类名称 quantile_df <- as.data.frame(do.call(rbind, quantile_result)) # 将原列表名称(人口区间)转为单独列 quantile_df$Tramspoblacio <- rownames(quantile_df) # 调整列顺序,把分类列放在最前面 quantile_df <- quantile_df[, c(ncol(quantile_df), 1:(ncol(quantile_df)-1))] # 清除行名 rownames(quantile_df) <- NULL
方法二:用tidyverse工具(dplyr + tidyr)
如果习惯tidy语法,这种方法更简洁,还能直接从原始数据生成结果:
library(dplyr) library(tidyr) quantile_df <- index_articles_migpunts %>% group_by(Tramspoblacio) %>% summarize( across(index_articles_ponderats2_migpunts, ~quantile(., probs = seq(.1, .9, by = .1))), .groups = "drop" ) %>% unnest_wider(index_articles_ponderats2_migpunts)
如果已经有了tapply生成的列表,也可以直接处理:
quantile_result <- tapply(...) # 你的原tapply代码 quantile_df <- quantile_result %>% enframe(name = "Tramspoblacio", value = "quantiles") %>% unnest_wider(quantiles)
内容的提问来源于stack exchange,提问作者FrancoBattiato
相关产品推荐
相关产品推荐

