我目前的数据框格式较宽,有干预前和干预后的问卷评分。有848名患者至少有一份问卷。我想看一下数据来比较分数从干预前和干预后的变化情况。但是,由于数据格式宽,而且每位患者的问卷数量不一致,因此我很挣扎。有一个变量列出问卷的实例,问卷的价值是另一个变量。
以下是目前的示例:
a=c('instance1','total1','instance2', 'total2', 'instance3', 'total3',
'instance4','total4', 'instance5','total5')
b=c('postop2', '5', 'postop1', '7', NA, NA, 'preop', '10', NA, NA)
c=c(NA, NA, 'preop', '3', NA, NA, 'postop1', '4', 'postop2', '3')
data.frame(rbind(a,b,c))
有848行问卷数据。
我需要计算从preop到postop问卷的差异。重新组织这些数据的最佳方法是什么,以便我可以获得这些值?我很挣扎,因为所有848名患者之间并没有排队。
谢谢你的帮助。
答案 0 :(得分:2)
不确定这是否是你所追求的,但尝试这种data.table方法:
library(data.table)
DT <- data.table(rbind(b,c))
names(DT) <- a
DT2 <- melt(DT, measure = patterns("^instance", "^total"), value.name = c("instance", "total"))
DT2
variable instance total
1: 1 postop2 5
2: 1 NA NA
3: 2 postop1 7
4: 2 preop 3
5: 3 NA NA
6: 3 NA NA
7: 4 preop 10
8: 4 postop1 4
9: 5 NA NA
10: 5 postop2 3
编辑:
如果您想要摘要,您也可以这样做:
DT2$total <- as.numeric(DT2$total) # for some reason total is class character
DT2[, sum(total), by=instance]
instance V1
1: postop2 8
2: NA NA
3: postop1 11
4: preop 13