长型和宽型数据在数据分析中非常常见。一般人们看到的以行为样本以列为变量的数据为宽型数据,非常适合人类查看和理解。但是在数据分析中,常常需要将数据转换成长型数据才能便于分析和作图。将在以下几个例子中进行理解和介绍。同时使用R中不同的三个包进行长宽数据的转换。
我们先建立一个简单的数据框:
查看数据框如下:
这是宽型数据,如果还是明白的话,跟长型数据一对比就一目了然了。
Wide to long
Wide to long
reshape2同时使用melt函数进行宽到长数据的转换,但是参数略有不同,主要的两个参数是id.vars和measure.vars.
Wide to long
tidyr中的gather函数,跟reshape和reshape2中的melt函数的参数有较大的改变,但是更容易理解。
gather(data, key = "key", value = "value", ..., na.rm = FALSE, convert = FALSE, factor_key = FALSE)
其中的key和value生成新的变量的变量名,...表示可以要进行转换的变量,相当于reshape2中melt函数的measure.vars参数。直接看例子:
初学者在使用R时,常常对reshape和reshape2有点迷惑,尤其是melt函数名字一模一样,因此容易造成误解,加载了reshape2后发现cast函数不能使用。个人倾向于直接使用gather和spread函数,直接跳过reshape和reshape2的困扰。不过理清楚reshape和reshape2的主要区别,使用起来也不容易混淆。