【问题标题】:R/dplyr: Grouping and mutating problem with sum functionR/dplyr:sum 函数的分组和变异问题
【发布时间】: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,它掩盖了mutateplyr::mutate 不尊重组并给出总和。你能用dplyr::mutate 试试同样的代码吗?但你说这只是某些Years 的条件,所以我不太确定。
  • 也即将发表评论:plyr 可能会干扰group_by 的正常工作。否则,运行您的代码并找到总和大于 1 的 yearCorridor 的组合。删除除这些之外的所有值。您将得到一个较小的数据集,您可以手动检查数据质量问题。
  • @MrFlick 不幸的是,由于某种原因,数字上升到 60。这对我来说是莫名其妙的。
  • @RonakShah 我不知道 plyr 问题,很高兴知道!我已经加载了 tidyverse,你认为这可能仍然导致问题吗?

标签: r grouping dplyr


【解决方案1】:

我猜你需要使用summarise 而不是mutate

df_final %>% 
  group_by(Corridor, Year) %>%
  summarise(total = sum(Index_A)) %>% 
  ungroup

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 2014-03-25
    相关资源
    最近更新 更多