【问题标题】:Sum values based on values of two columns in R基于 R 中两列的值求和值
【发布时间】:2020-05-23 04:51:42
【问题描述】:

我目前正在处理一个包含始发地、目的地和其他一些空中交通相关信息的空中交通数据集。但是,就我的分析而言,只要航班在相同的两个城市之间进行,我就想合并信息。

例如,西雅图到波特兰的航班数据需要与波特兰到西雅图的航班数据合并。

这是数据集的一个示例:

airtravel <- structure(list(CARRIER = structure(c(6L, 13L, 6L, 1L, 1L, 13L, 
17L, 17L, 13L, 13L, 13L, 13L, 2L, 1L, 13L), .Label = c("9E", 
"AA", "AS", "B6", "DL", "EV", "F9", "G4", "HA", "MQ", "NK", "OH", 
"OO", "UA", "WN", "YV", "YX"), class = "factor"), OD = c("DCA - ORD", 
"PDX - SEA", "ORD - DCA", "CHA - ATL", "ATL - CHA", "ELM - DTW", 
"LGA - RIC", "RIC - LGA", "DTW - ELM", "BZN - SEA", "SEA - BZN", 
"SEA - PDX", "DCA - LGA", "AVL - ATL", "SFO - SNA"), diff = c(164, 158, 146, 
    142, 141, 138, 138, 138, 136, 130, 130, 130, 127, 124, 124
    )), row.names = c(2983L, 7423L, 3217L, 115L, 17L, 6737L, 
11042L, 11315L, 6669L, 6370L, 7624L, 7636L, 685L, 66L, 7693L), class = "data.frame")

我想总结一下涉及相同两个城市的行的差异。有人可以阐明如何解决这个问题吗?

提前致谢!

【问题讨论】:

  • 聚合是什么意思?你想对这些行之间的值求和还是做其他事情?通常最好使用dput 共享数据并显示预期输出。请阅读有关how to ask a good question 以及如何提供reproducible example 的信息。
  • @RonakShah,非常感谢您的建议。我已经相应地编辑了我的问题。我仍然是堆栈溢出的新手,非常感谢您的 cmets!

标签: r data-cleaning


【解决方案1】:

您可以将OD 列划分为source 和基于它们之间的'-' 分隔符的目标,使用pminpmax 按行对它们进行排序,并得到sumdiff

library(dplyr)

airtravel %>%
  tidyr::separate(OD, c('source', 'destination'), sep = '\\s*-\\s*') %>%
  group_by(grp = pmin(source, destination), grp2 = pmax(source, destination)) %>%
  summarise(diff = sum(diff))


#  grp   grp2   diff
#  <chr> <chr> <dbl>
#1 ATL   AVL     124
#2 ATL   CHA     283
#3 BZN   SEA     260
#4 DCA   LGA     127
#5 DCA   ORD     310
#6 DTW   ELM     274
#7 LGA   RIC     276
#8 PDX   SEA     288
#9 SFO   SNA     124

如果您想保留更多列,可以将它们添加到group_by

【讨论】:

    【解决方案2】:

    我们可以使用base R 来执行此操作,方法是拆分“OD”列,然后将sort 用作aggregate 中的分组变量

    aggregate(airtravel$diff, list(OD = sapply(strsplit(airtravel$OD, "\\s*-\\s*"), 
          function(x) paste(sort(x), collapse=" - "))), FUN = sum)
    #         OD   x
    #1 ATL - AVL 124
    #2 ATL - CHA 283
    #3 BZN - SEA 260
    #4 DCA - LGA 127
    #5 DCA - ORD 310
    #6 DTW - ELM 274
    #7 LGA - RIC 276
    #8 PDX - SEA 288
    #9 SFO - SNA 124
    

    【讨论】:

      猜你喜欢
      • 2017-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多