使用reshape2包dcast函数出错:为何仅生成频数表而非分值?
问题排查与解决方法
- 核心问题:
dcast默认在碰到同一球队同一年度的多条记录时,会统计该组合的出现频数,而非对积分total求和。另外xtabs和table本身就是用来生成计数统计的工具,自然没法直接输出积分总和。 - 具体解决办法:
- 先检查数据是否有重复记录:执行
duplicated(EvoTeam[, c("club_name", "newdate")]),看是否存在同一球队同一年度的多条数据。如果有,要么提前去重,要么直接在聚合时处理。 - 修改
dcast代码,指定聚合函数为求和:dcast(EvoTeam, club_name ~ newdate, value.var = "total", fun.aggregate = sum) - 用
xtabs实现的话,把积分作为权重变量即可:xtabs(total ~ club_name + newdate, data = EvoTeam)
- 先检查数据是否有重复记录:执行
- 额外优化:如果想把无积分的年度显示为
NA而非0,给dcast加个fill参数:dcast(EvoTeam, club_name ~ newdate, value.var = "total", fun.aggregate = sum, fill = NA)
内容的提问来源于stack exchange,提问作者kaezar22
相关产品推荐
相关产品推荐

