我正在尝试重塑一个纵向数据集,其中包含一年内几个人的左眼和右眼的视觉测量值。我需要最终得到一个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")
...但是,如果每个时间点有两个数据(或更多),我该怎么做呢?
答案 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))