带有groupby的R-dplyr将2行与列值组合正确但混合起来

时间:2017-01-29 01:42:52

标签: r dplyr

总结数据处理问题我正在努力争取一个标题很难,但一个简短的例子总结了这一点。我有航空公司相关数据的数据表,其中包含原始机场和目的地机场的列。我的数据如下:

my_data = collect(filter(flightdata, TailNum == t_n) %>%
                select(airport1=Origin,airport2=Dest,ActualElapsedTime) %>% 
                group_by(airport1,airport2) %>%
                summarize(ActualElapsedTime = mean(ActualElapsedTime)))

my_data
     airport1   airport2     ActualElapsedTime
      <chr>    <chr>             <dbl>
1       HNL      ITO          51.67416
2       HNL      KOA          44.00937
3       HNL      LIH          37.98526
4       HNL      OGG          37.52542
5       ITO      HNL          50.02260
6       ITO      OGG          39.22222
7       KOA      HNL          43.52518
8       KOA      OGG          34.20370
9       LIH      HNL          33.47679
10      LIH      OGG          47.06522
11      OGG      HNL          35.28550
12      OGG      ITO          37.57143
13      OGG      KOA          31.61364
14      OGG      LIH          45.46667

这个表是group_by的结果,并总结了我做的,也如上所示。但是,当我进行分组和总结时,我希望将它分组(HNL ITO)和(ITO HNL)在一起,而不是分开(第1行有(HNL,ITO),第5行有(ITO,HNL)) 。这些分组行在我的输出中是分开的原因是因为row1对应于从HNL机场到ITO机场的航班,而row5对应于从ITO到HNL的航班。我得到的数据帧将分为7组,而不是14组。

对此的任何想法将不胜感激。我只是学习dplyr和管道的%&gt;%它们很棒,我也想得到它。

编辑 - 我尝试将我的选择线更改为

select(airport1=pmin(Origin,Dest),airport2=pmax(Origin,Dest),ActualElapsedTime)

但它不起作用......

1 个答案:

答案 0 :(得分:2)

一种方法是创建一个新变量,其中包含 airport1 airport2 的每个配对,然后使用它作为分组变量汇总数据。

在这种情况下,我们通过按字母顺序粘贴 airport1 airport2 的名称来创建一个名为组合的变量,因此我们有一个每个配对的独特价值。

my_data <- collect(
  flightdata %>% 
    filter(TailNum == t_n) %>%
    select(airport1 = Origin, airport2 = Dest, ActualElapsedTime) %>% 
    mutate(combination = ifelse(airport1 < airport2, 
                                paste(airport1, airport2),
                                paste(airport2, airport1))
    ) %>% 
    group_by(combination) %>% 
    summarize(ActualElapsedTime = mean(ActualElapsedTime))
  )