如何在R中搭建包含各行业公司数、股价均值与标准差的统计表
分行业整合股票价格统计指标的实现方法
前置注意事项
你之前写的均值计算代码存在拼写偏差:mean(CleanStock$Price)里的数据集名少了末尾的s,和你实际的CleanStocks对象不匹配,运行时会直接报错,需要修正为CleanStocks$Price。
核心实现逻辑是按行业分组统一计算所有需要的统计值,不需要单独跑table计数后再手动拼接均值、标准差结果,可完全避免行业顺序错位、数值不匹配的问题,以下是两种常用的可直接运行的实现路径:
基础R原生实现(无需安装额外扩展包)
直接使用原生的aggregate()函数完成分组聚合,一步生成完整统计表:
# 按行业分组,同步计算组内公司数量、股票价格均值、价格标准差 sector_summary <- aggregate( Price ~ Sector, data = CleanStocks, FUN = function(group_price) { c( company_num = length(group_price), # 与table()输出的计数结果完全等价 price_mean = mean(group_price, na.rm = TRUE), price_sd = sd(group_price, na.rm = TRUE) ) } ) # 把聚合生成的嵌套结构整理成规整的平面数据框 sector_summary <- do.call(data.frame, sector_summary) # 重命名列名方便后续读取 colnames(sector_summary) <- c("行业分类", "上市公司数量", "股票价格均值", "股票价格标准差")
dplyr 实现(代码简洁度更高,适配常规数据清洗流程)
如果已经在使用tidyverse生态做数据处理,用分组汇总的写法会更直观,也方便后续追加其他统计指标:
# 提前加载dplyr包(未安装时先运行 install.packages("dplyr")) library(dplyr) sector_summary <- CleanStocks %>% group_by(Sector) %>% # 按行业字段分组 summarise( company_num = n(), # 组内样本数,与table()输出完全一致 price_mean = mean(Price, na.rm = TRUE), price_sd = sd(Price, na.rm = TRUE) ) %>% ungroup() # 取消分组标记,避免后续操作受分组状态干扰
运行后的效果说明
两种方法生成的统计表,会自动把你之前通过table(CleanStocks$Sector)得到的所有行业计数(如非必需消费品行业55家、必需消费品25家、能源6家等)和对应组的价格均值、标准差整合到同一张表里,不需要手动跨表拼接。如果需要导出本地文件,直接运行:
write.csv(sector_summary, "分行业股票价格统计结果.csv", row.names = FALSE, fileEncoding = "UTF-8")
可以避免导出的文件出现中文乱码。
内容的提问来源于stack exchange,提问作者Abbey Lewis
相关产品推荐
相关产品推荐

