2017-10-29 11 views
1

私は、アプリケーションでの使用を容易にするために再構成する必要のあるデータフレームを持っています。ここでデータフレームの圧縮バージョンは次のとおりR - 1つの2つの列のデータフレームの照合値を再形成する方法は?

Carrier <- c("Mesa", "United", "JetBlue", "ExpressJet", "SkyWest") 
Flight_Num <- c(7124, 7177, 334, 1223, 6380) 
Origin <- c("ORD", "EWR", "SFO", "BOS", "BDL") 
Dest <- c("PIT", "BOI", "DSM", "CWA", "CMH") 
Sched_Depr <- c(1955, 1900, 1845, 1253, 1755) 

df <- data.frame(Carrier, Flight_Num, Origin, Dest, Sched_Depr) 

    Carrier Flight_Num Origin Dest Sched_Depr 
1  Mesa  7124 ORD PIT  1955 
2  United  7177 EWR BOI  1900 
3 JetBlue  334 SFO DSM  1845 
4 ExpressJet  1223 BOS CWA  1253 
5 SkyWest  6380 BDL CMH  1755 

OriginDeptはすなわちアプリケーションによって(すなわち、座標)地理データとして解釈されます。 Coordsという1つの列で照合する必要があります。同時に、新しいオーダーマーカー変数Order_Pointsを作成する必要があります。だから、新しい、形状変更データフレームは次のようになります。

 Carrier Flight_Num Coords Sched_Depr Order_Points 
1  Mesa  7124 ORD  1955   1 
2  Mesa  7124 PIT  1955   2 
3  United  7177 EWR  1900   1 
4  United  7177 BOI  1900   2 
5  JetBlue  334 SFO  1845   1 
6  JetBlue  334 DSM  1845   2 
7 ExpressJet  1223 BOS  1253   1 
8 ExpressJet  1223 CWA  1253   2 
9  SkyWest  6380 BDL  1755   1 
10 SkyWest  6380 CMH  1755   2 

維持(および複製)しながら、他の変数をこのような2つの列を照合するための効率的な方法だろうか?ここで

答えて

2

はtidyverse機能を使用してオプションです。 gatherを使用して、データフレームを「ワイド」フォーマットから「ロング」フォーマットに変換します。また、これはCoordsOriginDestであるかどうかをマーク(ここではTypeと呼ばれる)の列を追加します。

library(tidyverse) 

df.long = df %>% 
    gather(Type, Coords, Origin, Dest) %>% 
    arrange(Carrier, desc(Type)) 
 Carrier Flight_Num Sched_Depr Type Coords 
1 ExpressJet  1223  1253 Origin BOS 
2 ExpressJet  1223  1253 Dest CWA 
3  JetBlue  334  1845 Origin SFO 
4  JetBlue  334  1845 Dest DSM 
5  Mesa  7124  1955 Origin ORD 
6  Mesa  7124  1955 Dest PIT 
7  SkyWest  6380  1755 Origin BDL 
8  SkyWest  6380  1755 Dest CMH 
9  United  7177  1900 Origin EWR 
10  United  7177  1900 Dest BOI 
+0

わずか上記のあなたの例のように持っているものに時間の変数名を変更することができます改善: 'DF%>% ギャザー(Order_Points、COORDS、原産地、取引先)%>% (Order_Pointsを変異= ifelse(Order_Points == "起源"、1、2))%>% 選択(キャリア、Flight_Num、COORDS、Sched_Depr、Order_Points)%>% 配置(DESC(Sched_Depr)) ' – jsb

0

ます。また、ベースR使用することができます。

dat <- data.frame(Carrier, Flight_Num, Origin, Dest, Sched_Depr) 
    df=reshape(dat,idvar = "Carrier",varying = list(3:4),direction = "long") 
`row.names<-`(df[order(df[,1]),],NULL) 
     Carrier Flight_Num Sched_Depr time Origin 
1 ExpressJet  1223  1253 1 BOS 
2 ExpressJet  1223  1253 2 CWA 
3  JetBlue  334  1845 1 SFO 
4  JetBlue  334  1845 2 DSM 
5  Mesa  7124  1955 1 ORD 
6  Mesa  7124  1955 2 PIT 
7  SkyWest  6380  1755 1 BDL 
8  SkyWest  6380  1755 2 CMH 
9  United  7177  1900 1 EWR 
10  United  7177  1900 2 BOI 

をあなたは

関連する問題