如何在R中按州对指定列应用函数计算均值
按州计算犯罪率均值的apply类函数实现方案
方法1:使用tapply(最简洁的apply家族函数)
tapply是R中专门用于按分组对向量执行函数操作的工具,直接满足需求:
# 读取数据集(确保文件在当前工作目录) crime_data <- read.csv("state_crime.csv") # 按州分组计算crimes列的均值 state_crime_mean <- tapply(crime_data$crimes, crime_data$state, mean) # 若存在缺失值,需添加na.rm参数避免结果为NA # state_crime_mean <- tapply(crime_data$crimes, crime_data$state, mean, na.rm = TRUE)
执行后得到一个命名向量,向量名称为州名,对应值为该州2000-2019年的crimes均值。
方法2:使用split + lapply(更灵活的组合)
如果后续需要对每个州的数据做更多扩展操作,这种拆分+遍历的方式更适配:
# 按州拆分数据集为列表,每个元素对应一个州的完整数据 crime_state_list <- split(crime_data, crime_data$state) # 遍历列表,计算每个州的crimes均值 state_crime_mean_list <- lapply(crime_state_list, function(sub_df) { mean(sub_df$crimes, na.rm = TRUE) # 建议处理缺失值 }) # 转换为数据框格式(可选,方便后续分析) state_crime_mean_df <- data.frame( state = names(state_crime_mean_list), mean_crimes = unlist(state_crime_mean_list) )
split将原始数据按state拆分为子数据框组成的列表,lapply遍历每个子数据框执行均值计算,最后可通过unlist将结果转换为结构化数据框。
内容的提问来源于stack exchange,提问作者Kevin Ballad
相关产品推荐
相关产品推荐

