如何在R中按类别聚合价格均值并生成新数据集?
解决aggregate计算分组均值的问题
咱们来搞定这个问题~你用aggregate做分组均值的思路是对的,大概率是细节上的小问题导致没拿到预期结果。下面一步步来修正:
先确认数据状态
首先可以快速检查你的分组变量和数据是否有异常:
# 确认class列只有1、2、3三个值 unique(data1$class) # 检查Price列是否存在NA值(NA会直接让均值变成NA) sum(is.na(data1$Price))
两种修正后的可行写法
写法1:优化你原有的代码
你原来的代码运行后,结果的列名会是Group.1和x,这可能不是你想要的清晰命名。我们可以给分组列指定名称,同时加上na.rm=TRUE避免NA干扰计算:
classdata <- aggregate( x = data1$Price, by = list(class = data1$class), # 给分组列命名为class FUN = mean, na.rm = TRUE # 若Price有NA必须加,否则均值会返回NA ) # 可选:把均值列重命名得更直观 colnames(classdata) <- c("class", "mean_price")
写法2:用公式语法(更常用易读)
R的aggregate支持公式写法,这种方式更符合R的常规风格,结果的列名直接就是class和Price(对应均值):
classdata <- aggregate( Price ~ class, # 格式:待计算均值的列 ~ 分组列 data = data1, FUN = mean, na.rm = TRUE )
结果验证
运行完上面任意一段代码后,查看classdata就能得到你预期的结果:3行数据,每行对应class的1、2、3,以及该类别的Price均值。
内容的提问来源于stack exchange,提问作者Mandeepa Das
相关产品推荐
相关产品推荐

