R-如何将两列的数据帧排序值重新设置为一列?

R-如何将两列的数据帧排序值重新设置为一列?,r,dataframe,reshape,R,Dataframe,Reshape,我有一个数据框架,我需要对其进行重塑,以便于在viz应用程序中使用。以下是数据帧的压缩版本: 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", "

我有一个数据框架,我需要对其进行重塑,以便于在viz应用程序中使用。以下是数据帧的压缩版本:

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

在保留(并复制)其他变量的同时,有什么有效的方法来整理这两列呢?

这里有一个使用tidyverse函数的选项。我们使用
gather
将数据帧从“宽”格式转换为“长”格式。这还添加了一个列(此处称为
Type
),用于标记
Coords
原点还是
Dest

library(tidyverse)

df.long = df %>% 
  gather(Type, Coords, Origin, Dest) %>% 
  arrange(Carrier, desc(Type))

您也可以使用base 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

dat轻微改进:
df%%>%聚集(订单点、坐标、原点、目的地)%%>%变异(订单点=ifelse(订单点==“原点”,1,2))%%>%选择(承运人、航班号、坐标、日程安排、订单安排)%%>%排列(描述(日程安排))
      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
 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