数据清洗比用函数:gather()与spread()
在R中,数据是以data frame的形式存在,每一行是一个observation,每一列则是一个variable,如果行和列放错了位置就变成需要清洗的脏数据了,spread() 和 gather() 就是帮我们把行和列归位的。
上个例子:
data <- data.frame( time = as.Date('2018-10-12') + 0:9, X = rnorm(10, 0, 1), Y = rnorm(10, 0, 2), Z = rnorm(10, 0, 4) )
data长这样:
time X Y Z 1 2018-10-12 0.3845284 -0.9836826 -1.0569133 2 2018-10-13 -1.3013479 -0.7696469 -0.2760410 3 2018-10-14 0.1635476 1.1942040 -1.2547790 4 2018-10-15 1.2628161 2.5839376 6.6017756 5 2018-10-16 1.4551718 -5.6564205 2.9474487 6 2018-10-17 0.1393586 1.1265156 -4.4762960 7 2018-10-18 -0.2038476 -2.3953796 0.3373139 8 2018-10-19 0.6941938 0.3539203 0.2740444 9 2018-10-20 -0.6756837 -0.5591505 4.0882947 10 2018-10-21 0.4185659 0.6060037 -5.8530951
先来看看gather的()用法。gather()是用来把错放在列的数据回归到行里的:
library(tidyr) data2 <- gather(data, category, value, X, Y, Z)
category是表头的东西放进行里之后叫的名字,value是原有的数据叫的名字,X,Y,Z则是我们想转换的列。
time category value 1 2018-10-12 X 1.673028459 2 2018-10-13 X -1.364111807 3 2018-10-14 X -0.014500001 4 2018-10-15 X -2.183752736 5 2018-10-16 X -0.436903127 6 2018-10-17 X -0.556745963 7 2018-10-18 X 0.290214951 8 2018-10-19 X -0.704078406 9 2018-10-20 X -0.223482208 10 2018-10-21 X -0.170426277 11 2018-10-12 Y 1.361510858 12 2018-10-13 Y 0.956045956 13 2018-10-14 Y 2.599511931 14 2018-10-15 Y -4.183381629 15 2018-10-16 Y 0.519890823 16 2018-10-17 Y 2.620015778 17 2018-10-18 Y -1.288184298 18 2018-10-19 Y -0.090887780 19 2018-10-20 Y 1.396205902 20 2018-10-21 Y -0.979669215 21 2018-10-12 Z 3.420684975 22 2018-10-13 Z -3.929318661 23 2018-10-14 Z -1.479456924 24 2018-10-15 Z 2.977001374 25 2018-10-16 Z 0.007312678 26 2018-10-17 Z 0.122019491 27
在gather的时候,有时我们想把所有的行都变过来,或者列数太多了,没办法一一specify,可以省略X,Y,Z。 直接用"-"来指示想要忽略哪些列,比如下面的语句和之前的gather是一样的效果:
gather(data, category, value, -time)
赞 (0)