使用每个时间点有多个值的重塑形状

时间:2016-01-20 10:13:33

标签: r reshape

我正在尝试重塑一个纵向数据集,其中包含一年内几个人的左眼和右眼的视觉测量值。我需要最终得到一个data.frame()标题为'patient','month','re','le'(其中're'表示'右眼','le'表示'左眼')

我的数据目前采用以下格式:

 patient','re_month1','le_month1','re_month2','le_month2'....'le_month12'

我知道如果每个时间点只有一个数据,我可以使用reshape()函数对数据进行排序。如果我只是在处理'病人','month1','month2'等,我可以使用以下内容:

 reshape(dframe,idvar = 'patient',v.names = 'vision',
                       varying = 2:13,direction = "long")

...但是,如果每个时间点有两个数据(或更多),我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

我们可以使用melt中的data.table,并使用measure参数指定patterns列。 patterns可以使用多个正则表达式/固定列名称。

 library(data.table)
 melt(setDT(dframe), id.var="patient", 
             measure = patterns("^re_", "^le_"))
 #    patient variable value1 value2
 #1:       1        1     20     21
 #2:       2        1     25     18
 #3:       3        1     23     22
 #4:       1        2     18     29
 #5:       2        2     22     19
 #6:       3        2     25     24

数据

 dframe <- data.frame(patient=1:3, re_month1 = c(20, 25,
  23), le_month1= c(21, 18, 22), re_month2=c(18, 22, 25),
  le_month2= c(29, 19, 24))