【发布时间】:2020-08-07 04:14:19
【问题描述】:
我正在处理不同年份某些空中走廊中飞机的数据集,df 看起来像这样:
ID Airline Corridor Year Index_A
1244 American C1 2010 0.03
1253 Delta C12 2011 0.43
1643 Delta C1 2010 0.05
1375 United C1 2010 0.21
1621 American C5 2016 0.02
变量Index_A 的范围为0-1。 Corridor 是因子格式。
我正在尝试为每个Year 和 Corridor 计算Index_A 的总和。 Index_A 的设置方式是,对于每个 Year 和 Corridor,其总和必须小于 1。
这是我的代码遇到问题的地方。它看起来像这样:
df_final %>% group_by(Corridor, Year) %>%
mutate(total = sum(Index_A)) %>% ungroup(Corridor, Year)
问题是在某些年份total 超出范围,即 >1。我不确定我做错了什么以及如何解决这个问题。
我看错了吗?我会很感激任何帮助,并且没有包裹偏好。谢谢。
【问题讨论】:
-
您的代码似乎没有任何问题。您确定您的数据是正确的并执行给定的规则吗?它比1大多少?您是否在机器公差 1 以内?在计算机上使用浮点数很难得到准确的值。
-
一种可能是你加载了
plyr,它掩盖了mutate,plyr::mutate不尊重组并给出总和。你能用dplyr::mutate试试同样的代码吗?但你说这只是某些Years的条件,所以我不太确定。 -
也即将发表评论:
plyr可能会干扰group_by的正常工作。否则,运行您的代码并找到总和大于 1 的year和Corridor的组合。删除除这些之外的所有值。您将得到一个较小的数据集,您可以手动检查数据质量问题。 -
@MrFlick 不幸的是,由于某种原因,数字上升到 60。这对我来说是莫名其妙的。
-
@RonakShah 我不知道 plyr 问题,很高兴知道!我已经加载了 tidyverse,你认为这可能仍然导致问题吗?