R 数据重塑学习笔记

什么是数据重塑?

数据重塑(Data Reshaping)是指将一个数据集中的行列进行转换、整合、拆分,使其符合我们分析的需求。在R语言中,我们可以使用tidyverse包中的dplyr和tidyr两个包进行数据重塑。

数据集介绍

本文将使用R语言内置的mtcars数据集进行演示。

Copy Code
head(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 Code
head(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 Code
rbind(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 Code
library(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 Code
mtcars_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 Code
mtcars_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语言中的数据重塑相关内容。