【问题标题】:Remove duplicates and sum values in R [duplicate]删除R中的重复值和求和值[重复]
【发布时间】:2016-08-16 02:11:57
【问题描述】:

我有一个数据集 df,它看起来像这样,但有几百万个实例:

Date AD Runway MTOW nr.flights 2008-01-01 A 18 376 2 2008-01-01 A 18 376 2 2008-01-01 D 36 190 1 2008-01-02 D 09 150 2 2008-01-02 A 36 280 1 2008-01-02 A 36 280 1

我希望它看起来像这样:

Date AD Runway MTOW nr.flights 2008-01-01 A 18 752 4 2008-01-01 D 36 190 2 2008-01-02 D 9 150 2 2008-01-02 A 36 560 1

基本上我想将所有相同的日期、广告和跑道行组合在一起,因此所有重复项都被删除。同时,我希望总结特定日期、AD 和跑道的 MTOW 和 nr.flights。

我试过这个: vals <- expand.grid(Date = unique(df$Date), Runway = unique(df$Runway), AD = unique(df$AD))

所以我可以将它与原始数据集 df 合并,但这不起作用。我也尝试了一些 group_by 的组合,但这也没有给我想要的结果。

复制:

df <- data.frame(Date=c("2008-01-01","2008-01-01","2008-01-01","2008-01-02","2008-01-02","2008-01-02"),
              AD = c("A", "A", "D", "D", "A", "A"), Runway = c(18, 18, 36, 09, 36,36), 
              MTOW = c(376, 376, 190, 150, 280, 280), nr.flights = c(2,2,1,2,1,1))

任何帮助将不胜感激!

【问题讨论】:

    标签: r sum duplicates


    【解决方案1】:

    使用库dplyr,您可以执行以下操作:

    df %>% group_by(Date, AD, Runway) %>% summarise(MTOW = sum(MTOW), nr.flights = sum(nr.flights))
    Source: local data frame [4 x 5]
    Groups: Date, AD [?]
    
            Date     AD Runway  MTOW nr.flights
          (fctr) (fctr)  (dbl) (dbl)      (dbl)
    1 2008-01-01      A     18   752          4
    2 2008-01-01      D     36   190          1
    3 2008-01-02      A     36   560          2
    4 2008-01-02      D      9   150          2
    

    我认为已经有很多这样的帖子和示例了。

    【讨论】:

    • 感谢您的回答!该解决方案适用于我的示例数据集,但不知何故它不适用于我的原始数据集。我还不知道为什么。但是我现在有解决方案,所以还是谢谢!
    • 感谢 stackoverflow 的最佳方式是投票或接受答案。 :)
    【解决方案2】:

    这是一个使用包plyr的:

    library(plyr)
    ddply(df,~Date + AD + Runway,summarise,MTOW=sum(MTOW),nr.flights=sum(nr.flights))
    

    【讨论】:

    • 此解决方案完美运行!非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    • 2015-09-25
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多