如何用For Loop按职业类型分组计算Prestige均值(超千种类型)
如何用For Loop按所有职业类型分组计算Prestige均值?
嘿,我懂你现在的麻烦——要给1000多种职业类型挨个写else if分支根本不现实,完全是重复劳动!咱们来改造一下你的For Loop,让它能自动适配所有职业类型,不用手动硬编码每一种。
首先,先说说你原来代码的小问题:每循环一行就重新计算整个组的均值,这会做大量重复计算,效率特别低,而且没法覆盖所有类型。咱们换个思路:先找出所有唯一的职业类型,然后循环这些唯一值,逐个计算均值就行。
改进后的For Loop代码
# 第一步:获取数据集中所有唯一的职业类型 unique_job_types <- unique(Prestige$type) # 第二步:创建一个空列表,用来存储每个类型的均值结果 prestige_mean_list <- list() # 第三步:循环遍历每个唯一职业类型 for (job_type in unique_job_types) { # 筛选出当前职业类型的所有数据 current_group <- Prestige[Prestige$type == job_type, ] # 计算该组的prestige均值,na.rm=TRUE用来忽略缺失值(按需调整) prestige_mean_list[[job_type]] <- mean(current_group$prestige, na.rm = TRUE) } # 可选:把列表转成数据框,更方便查看和后续处理 prestige_mean_df <- data.frame( 职业类型 = names(prestige_mean_list), 平均声望 = unlist(prestige_mean_list) )
代码说明
unique(Prestige$type)会自动提取数据集中所有不重复的职业类型,不管有1000种还是更多,都能一次性获取。- 用列表存储结果是因为列表可以轻松对应“职业类型-均值”的键值对,后续转成数据框也很方便。
na.rm = TRUE是个实用的小细节:如果某个职业类型的prestige字段有缺失值,加上这个参数能避免计算出NA,你可以根据自己数据集的实际情况决定要不要保留。
另外提一嘴:在R里其实有更简洁的方式(比如tapply或者dplyr的分组聚合),比如用tapply一行就能搞定:
tapply(Prestige$prestige, Prestige$type, mean, na.rm = TRUE)
不过既然你明确要求用For Loop,那上面的方案就完全能满足你的需求啦!
内容的提问来源于stack exchange,提问作者Lorenna Van Munnecom
相关产品推荐
相关产品推荐

