数据分析项目中大多数的时间都用在了准备数据上,一个典型的项目80%的精力都花在分析而进行的发现、清洗和准备数据上。只有不到5%的精力用于分析(剩下的时间都耗在了写报告上面)。
合并数据集
数据分析中最常见的一个障碍是将存储在两个不同地方的数据组合到一起。
粘贴数据结构
R提供了几个函数可以将多个数据结构粘贴成一个数据结构。
paste
paste
函数可以将多个字符型向量连接成一个向量,默认向量的值是用空格分隔的,我们可以通过sep
参数指定分隔符号,而collapse
参数可以用来指定这些值之间的连接符号。
x y # 默认paste(x, y)## [1] "a A" "b B" "c C" "d E" "e F"# 使用自定义分隔符paste(x, y, sep = ",")## [1] "a,A" "b,B" "c,C" "d,E" "e,F"# 指定连接符paste(x, y, sep = "-", collapse = "#")## [1] "a-A#b-B#c-C#d-E#e-F"
另外,使用简化版的paste0
函数只提供连接参数,没有分隔。
paste0(x, y, collapse = "#")## [1] "aA#bB#cC#dE#eF"
rbind 和 cbind
rbind
与cbind
函数分别可以以增加行或列的形式将几个对象(矩阵或者数据框)合并起来。你可以将它想象为以垂直或者水平地将两张表拼在一起。
merge
merge(x, y, by = , by.x = , by.y = , ...)
x
与y
指定用于合并的数据框,by
对应x
和y
共有的列名,后面by.x
与by.y
用于分别指定用于合并的列名。
数据转换
数据框中常用的更改变量的函数是transform
,它定义如下:
transform(`_data`, ...)
这个函数首先要指定一个数据框,跟着是一系列的表达式,表达式中的变量是数据框中的变量,transform
函数会完成每个表达式中的计算,然后返回最终的数据框。
head(mtcars)## mpg cyl disp hp drat wt qsec vs am gear carb## Mazda RX4 21.0 6 160 110 3.90 2.62 16.5 0 1 4 4## Mazda RX4 Wag 21.0 6 160 110 3.90 2.88 17.0 0 1 4 4## Datsun 710 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1## Hornet 4 Drive 21.4 6 258 110 3.08 3.21 19.4 1 0 3 1## Hornet Sportabout 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2## Valiant 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1mtcars.transformed mtcars.transformed## mpg cyl disp hp drat wt qsec vs am gear carb## Mazda RX4 21.0 6 160.0 110 3.90 2.62 16.5 0 1 4 4## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.88 17.0 0 1 4 4## Datsun 710 22.8 4 108.0 93 3.85 2.32 18.6 1 1 4 1## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.21 19.4 1 0 3 1## Hornet Sportabout 18.7 8 360.0 175 3.15 3.44 17.0 0 0 3 2## Valiant 18.1 6 225.0 105 2.76 3.46 20.2 1 0 3 1## Duster 360 14.3 8 360.0 245 3.21 3.57 15.8 0 0 3 4## Merc 240D 24.4 4 146.7 62 3.69 3.19 20.0 1 0 4 2## Merc 230 22.8 4 140.8 95 3.92 3.15 22.9 1 0 4 2## Merc 280 19.2 6 167.6 123 3.92 3.44 18.3 1 0 4 4## Merc 280C 17.8 6 167.6 123 3.92 3.44 18.9 1 0 4 4## Merc 450SE 16.4 8 275.8 180 3.07 4.07 17.4 0 0 3 3## Merc 450SL 17.3 8 275.8 180 3.07 3.73 17.6 0 0 3 3## Merc 450SLC 15.2