在每个时间点有多个值的情况下使用重塑
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))
我正在尝试重塑一个纵向数据集,其中包含一年内多个人左右眼的视觉测量值。我需要以 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))