如何在R语言中将10组不同rnorm()结果存入向量及统计分析
解决你的正态分布序列统计与数据框整理问题
你当前代码的问题
- 用
vector(length = 10)创建的是原子向量,只能存储单个值(比如数字、字符),没法存长度150的序列,得用列表来存这类复杂元素。 - 你把
hist()的结果赋值给data[i],但hist()返回的是直方图的统计对象,不是你需要的原始随机序列,完全搞错了存储目标。
正确实现步骤与代码
第一步:创建存储随机序列的列表
先存好10组长度150的正态分布随机序列,同时可以顺便画出每组的直方图:
# 创建长度为10的列表,用来存每组随机序列 data_list <- vector("list", length = 10) for(i in 1:10) { # 生成并保存随机序列 data_list[[i]] <- rnorm(150, 75, 10) # 绘制直方图,标注组别 hist(data_list[[i]], main = paste("第", i, "组正态分布直方图")) }
这里用vector("list", 10)创建列表,通过[[i]]访问列表元素,才能存下长度150的向量。
第二步:计算统计量并整理成数据框
可以用两种方式实现,选你顺手的就行:
方式1:循环处理
# 初始化空数据框,预设列名和数据类型 stats_df <- data.frame( 最小值 = numeric(10), 最大值 = numeric(10), 均值 = numeric(10), 中位数 = numeric(10) ) # 遍历每组序列,计算统计量并填入数据框 for(i in 1:10) { current_seq <- data_list[[i]] stats_df$最小值[i] <- min(current_seq) stats_df$最大值[i] <- max(current_seq) stats_df$均值[i] <- mean(current_seq) stats_df$中位数[i] <- median(current_seq) }
方式2:用lapply简化(更简洁的R风格)
# 定义一个函数,输入序列返回四个统计量的向量 calc_stats <- function(x) { c( 最小值 = min(x), 最大值 = max(x), 均值 = mean(x), 中位数 = median(x) ) } # 对列表每个元素应用统计函数,转置后转为数据框 stats_df <- as.data.frame(t(sapply(data_list, calc_stats)))
运行后,stats_df就是你需要的结果:10行对应10组序列,4列对应最小值、最大值、均值、中位数。
内容的提问来源于stack exchange,提问作者Milhouse
相关产品推荐
相关产品推荐

