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