2017-01-29 3 views
1

データ操作の問題を要約すると、タイトルに苦労していますが、簡単な例でこれを非常にうまくまとめています。私は航空会社に関連するデータのデータテーブルを持っています。出発地と目的地の空港の列があります。私のデータはこのようになります:R - dplyr、groupbyと一緒に、2列の列の値が正しく合っているが混ざっている

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)行5は(ITO、HNL)を持つ行とは別のものとして(HNL ITO)と(ITO HNL) 。 Row1はHNL空港からITO空港へのフライトに対応し、Row5はITOからHNLへのフライトに対応しているため、これらのグループ化された行は別々に出力されます。結果のデータフレームは14ではなく7つのグループにグループ化されます。

これについてのご意見は大変ありがたいです。私はちょうどdplyrと配管のための%>%を学んでいるし、彼らは素晴らしいです、私もこれを取得したいと思います。

EDIT - 私は

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

に私の選択ラインを変更しようとしたが、それは動作しませんでした...それを行うには

+0

これは、同様の質問のようになります。http://stackoverflow.com/questions/28992028/grouping-over-all-possible-combinations-of-several-variables-with-dplyr –

+0

外観のおかげかかります – Canovice

+0

私はその記事のように3つの変数のすべての組み合わせをグループ化していません。私はdplyrに "HNL ITOをITO HNLと同じコラムで扱っても、別のコラムにもかかわらず"と伝えようとしています。私はそうする最善の方法は、私は私の選択声明で試したように、airport1とairport2を正しく設定することだと思います – Canovice

答えて

2

一つの方法は、airport1の各ペアを含む、新しい変数を作成していますおよび空港2を使用し、それをグループ化変数として使用してデータを要約します。この場合

は、我々はairport1airport2の名前をアルファベット順に呼ば組み合わせ貼り付けることで変数を作成するので、私たちはそれぞれのペアリングのためのユニークな値を持っています。

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)) 
) 
関連する問題