在每个时间点有多个值的情况下使用重塑

Using reshape where there are multiple values at each time point

我正在尝试重塑一个纵向数据集,其中包含一年内多个人左右眼的视觉测量值。我需要以 data.frame() 结尾,标题为 'patient'、'month'、're'、'le'(其中 're' 表示 'right eye' 和 'le' 表示 'left eye')

我的数据目前的格式是:

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

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

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

...但是每个时间点有两条(或更多条)数据怎么办呢?

我们可以使用 data.table 中的 melt 并使用 patterns 参数指定 measure 列。 patterns 可以采用多个 regex/fixed 列名称。

 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))