R语言处理lakers数据集时mutate()计算结果与直接计算结果不一致问题
问题原因
核心差异来自于chartData的分组属性,dplyr的分组操作会让mutate按组独立执行计算:
- 首先验证
chartData的分组状态:运行groups(chartData)可以看到,你的数据集在group_by(game_type, period, player) %>% summarize(...)执行后,summarize默认移除了最内层的player分组,仍然保留了game_type、period两层分组结构。 - 两种计算的逻辑完全不同:
- 代码中mutate内的
rescale是按每个game_type + period分组单独计算缩放:每个分组内独立取当前组的Rebounds最大值、最小值做归一化,再映射到-10~10区间,不同分组的缩放基准不一样。 - 单独执行的
rescale(chartData$Rebounds, ...)是全局统一计算缩放:拿整个Rebounds列的全局最大值、最小值做归一化,所有数据用同一套基准计算,结果自然和分组计算的结果不一致。
- 代码中mutate内的
解决方案
如果需要让mutate的计算结果和全局单独计算的结果一致,只需要在mutate前先解除数据集的分组即可,修改代码如下:
graph_data <- chartData %>% ungroup() %>% # 新增这一行解除分组 mutate( Scaled.Rebounds = round(rescale(Rebounds, to = c(-10, 10)), 1), Scaled.TotalPoints = round(rescale(`Total Points`, to = c(-10, 10)), 1) )
内容的提问来源于stack exchange,提问作者erikscandola
相关产品推荐
相关产品推荐

