You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R处理Retrosheet棒球数据时group_by分组聚合结果一致问题求助

问题原因

  • 核心原因是dplyr和plyr两个扩展包存在同名函数冲突:你的代码使用了plyr包提供的ldply函数,说明运行环境中已经加载了plyr。如果dplyr的加载顺序早于plyr,环境中调用的summarize函数实际是plyr::summarize,该函数无法识别dplyr::group_by生成的分组属性,因此无论如何设置分组条件,都会直接计算全局的HomeRunsScore总和,返回结果自然完全相同。
  • 次要兼容问题:ldply生成的普通base R数据框,在部分旧版本dplyr中也可能偶发分组识别异常。

修复方案

你可以任选以下任意一种方案解决问题:

方案1:显式指定dplyr函数

调用summarize时显式声明使用dplyr版本,即可正确识别分组属性:

ll_data_frame %>%
  group_by(DayOfWeek) %>%
  dplyr::summarize(R = sum(HomeRunsScore))

方案2:调整包加载顺序

如果需要同时使用两个包的功能,将dplyr的加载顺序放在plyr之后,默认调用的同名函数就会是dplyr版本:

# 先加载plyr,再加载dplyr
library(plyr)
library(dplyr)

方案3(更推荐):全流程使用tidyverse语法

完全替换plyr相关函数,使用purrr::map_dfr直接拼接读取的多个文件,从根源上避免包冲突问题:

ll = list.files(pattern = "*.TXT")
mycols <- read_csv("game_log_header.csv") %>% names()

ll_data_frame <- purrr::map_dfr(ll, 
                                read_delim,
                                col_names = mycols,
                                delim = ",",
                                na = character())

修改完成后,原有分组汇总代码无需额外调整即可正常运行。

内容的提问来源于stack exchange,提问作者Wingg23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 14:06:06