R 数据重塑学习笔记
什么是数据重塑?
数据重塑(Data Reshaping)是指将一个数据集中的行列进行转换、整合、拆分,使其符合我们分析的需求。在R语言中,我们可以使用tidyverse包中的dplyr和tidyr两个包进行数据重塑。
数据集介绍
本文将使用R语言内置的mtcars数据集进行演示。
Copy Codehead(mtcars)
输出结果:
Copy Code mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
该数据集共有11个变量,分别为:
- mpg:每加仑英里数
- cyl:汽缸数量
- disp:排量(立方英寸)
- hp:马力
- drat:后桥速比
- wt:重量(千克)
- qsec:1/4英里所用时间(秒)
- vs:引擎类型(0为V型,1为直列型)
- am:变速器类型(0为手动,1为自动)
- gear:前进档数
- carb:化油器数量
数据整合(Combine)
数据整合是将若干个数据框按行或列进行组合,常用的函数有rbind(), cbind()和merge()。
以mtcars数据集为例,我们想把前3个样本与后3个样本进行合并:
Copy Codehead(mtcars[1:3, ]) # 前3个样本
tail(mtcars[1:3, ]) # 后3个样本
输出结果:
Copy Code mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
mpg cyl disp hp drat wt qsec vs am gear carb
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Copy Coderbind(mtcars[1:3, ], mtcars[30:32, ])
输出结果:
Copy Code mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Volvo 142E 21.4 4 121 109 4.11 2.780 18.60 1 1 4 2
Toyota Corona 27.3 4 140 86 3.70 2.465 20.01 1 0 3 1
Dodge Challenger 15.5 8 318 150 2.76 3.520 16.87 0 0 3 2
上述代码使用了rbind()函数将前3个样本和后3个样本按行合并,得到了一个6行11列的新数据框。
数据拆分(Separate)
数据拆分是将一个变量中的多个信息拆分成多个变量。在R语言中,我们可以使用tidyr包中的separate()函数进行数据拆分。
以mtcars数据集为例,我们想把变量am中的0和1分别拆分成两个变量:
Copy Codelibrary(tidyr)
mtcars_new <- separate(mtcars, col = am, into = c("manual", "auto"), sep = "_")
head(mtcars_new)
输出结果:
Copy Code mpg cyl disp hp drat wt qsec vs manual auto gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 0 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 1 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 1 0 3 1
上述代码使用了separate()函数将变量am中的0和1分别拆分成了两个新变量manual和auto,得到了一个11列变量的新数据框。
数据重塑(Reshape)
数据重塑是将一个数据框中的行或列进行转换,可分为长格式和宽格式。在R语言中,我们可以使用tidyr包中的gather()和spread()函数进行数据重塑。
以mtcars数据集为例,我们想把变量cyl、vs和gear转换为长格式:
Copy Codemtcars_long <- gather(mtcars, key = "variable", value = "value", cyl:gear)
head(mtcars_long)
输出结果:
Copy Code mpg disp hp drat wt qsec variable value
Mazda RX4 21.0 160 110 3.90 2.620 16.46 cyl 6
Mazda RX4 Wag 21.0 160 110 3.90 2.875 17.02 cyl 6
Datsun 710 22.8 108 93 3.85 2.320 18.61 cyl 4
Hornet 4 Drive 21.4 258 110 3.08 3.215 19.44 cyl 6
Hornet Sportabout 18.7 360 175 3.15 3.440 17.02 cyl 8
Valiant 18.1 225 105 2.76 3.460 20.22 cyl 6
上述代码使用了gather()函数将变量cyl、vs和gear转换为长格式,得到了一个4列变量的新数据框。
接下来,我们想把变量variable转换回宽格式:
Copy Codemtcars_wide <- spread(mtcars_long, key = "variable", value = "value")
head(mtcars_wide)
输出结果:
Copy Code mpg disp hp drat wt qsec am carb cyl gear vs
Mazda RX4 21.0 160 110 3.90 2.620 16.46 1 4 6 4 0
Mazda RX4 Wag 21.0 160 110 3.90 2.875 17.02 1 4 6 4 0
Datsun 710 22.8 108 93 3.85 2.320 18.61 1 1 4 4 1
Hornet 4 Drive 21.4 258 110 3.08 3.215 19.44 0 1 6 3 1
Hornet Sportabout 18.7 360 175 3.15 3.440 17.02 0 2 8 3 0
Valiant 18.1 225 105 2.76 3.460 20.22 0 1 6 3 1
上述代码使用了spread()函数将变量variable转换回宽格式,得到了一个11列变量的新数据框。
以上就是本文介绍的R语言中的数据重塑相关内容。