我们测量三位小朋友1、2、3,在1岁、2岁、3岁时候的身高。数据如下:
df = data.frame(id=c(1,2,3),
h1=c(15,16,17),
h2=c(21,22,23),
h3=c(31,32,33))
df
这是一个宽型数据,我们想把数据转换成长型,像这样。
这就是宽型数据转换成长型数据,这种转换在作图、数据分析是经常会用到。在do包中,将宽型数据转换成长数据的命令是reshape_toLong。
reshape_toLong命令可适用于3种情况:前缀prefix、后缀suffix、变量名var.names。下面我一一讲解。
1、前缀prefix
宽型数据
df = data.frame(id=c(1,2,3),
h1=c(15,16,17),
h2=c(21,22,23),
h3=c(31,32,33))
df
转换成长型数据的命令:
reshape_toLong(data = df,prefix = "h",j = "年龄")
reshape_toLong命令中,data是要整理的数据,prefix是重复测量变量的前缀,这里是h,j是新产生列的名称,这里是年龄。
新生存的数据,nrow是新添加的行,就是原始数据所处的行号。年龄是j添加的,h和id是之前的。
为什么新添加了nrow这一列,因为我们没有对原始宽型数据指定id,如果我们指定了id,那么就不会添加这一列。
reshape_toLong(data = df,id = "id",prefix = "h",j = "年龄")
我们看到,添加了id之后,就没有了指定行号的nrow,而且id也到了最前面的位置。这里需要注意,id是既然是id,那必须是唯一的才行。同时,我们看到,有没有id都可以进行转换,重要的事情说3遍,有没有id都可以进行转换,有没有id都可以进行转换,有没有id都可以进行转换。
2、后缀suffix
宽型数据
df = data.frame(id=c(1,2,3),
y1h=c(15,16,17),
y2h=c(21,22,23),
y3h=c(31,32,33))
df
转换成长型数据的命令
reshape_toLong(data = df,suffix = 'h',j = '年龄')
这个时候的h在y1h、y2h、y3h是后缀,所以,我们使用了后缀suffix。
下面,我们指定id来看一下。
reshape_toLong(data = df,id = 'id',suffix = 'h',j = '年龄')
3、变量名var.names
宽型数据
df=data.frame(升高=c(1,2,4),
体重=c(4,5,7),
腰围=c(74,64,69))
df
转换成长型数据的命令
reshape_toLong(data = df,
var.names = c('身高','体重','腰围'),
j='指标')
总结:今天是宽型数据转换成长型数据的第一讲,主要是有3种情况,前缀prefix,后缀suffix,变量名var.names,注意id可有可无、id可有可无、id可有可无,j是新产生列的名称。
今天演示的数据,是比较简单的,也是比较整齐的,下次我们再来演示一下复杂的情况。
do包中的其他命令