在R中以宽格式组合变量
我有一个数据框架,目前格式广泛,有干预前后的问卷分数。848名患者至少有一份问卷。我想看看数据,比较一下从干预前到干预后的得分变化情况。然而,我很挣扎,因为这些数据格式广泛,而且就每位患者的问卷数量而言,这些数据并不统一。有一个变量列出了问卷的实例,问卷的值是另一个变量 下面是它当前外观的示例:在R中以宽格式组合变量,r,dataframe,R,Dataframe,我有一个数据框架,目前格式广泛,有干预前后的问卷分数。848名患者至少有一份问卷。我想看看数据,比较一下从干预前到干预后的得分变化情况。然而,我很挣扎,因为这些数据格式广泛,而且就每位患者的问卷数量而言,这些数据并不统一。有一个变量列出了问卷的实例,问卷的值是另一个变量 下面是它当前外观的示例: a=c('instance1','total1','instance2', 'total2', 'instance3', 'total3', 'instance4','total4', 'instan
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行问卷数据
我需要计算从术前到术后问卷的差异。重新组织这些数据以便获得这些值的最佳方法是什么?我很挣扎,因为848名患者之间的实例并不一致
谢谢你的帮助 不确定这是否是您想要的,但请尝试此数据表方法:
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
库(data.table)
DT不确定这是否是您所追求的,但请尝试以下数据表方法:
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
库(data.table)
DT如果你看你的例子,我假设列名是第一行,而不是'X1',X2',等等。是的,列名是第一行如果你看你的例子,我假设列名是第一行,而不是'X1',X2',等等。是的,列名是第一行jeppe,这对样本数据有效。然而,当我把它应用到我的数据中时,它只会得到一些实例的总数,所以当我去计算平均值时,它只会返回平均值,例如“NA”和“postop2”。这可能是长格式融合的问题吗?任何关于从哪里开始寻找的建议都将不胜感激。谢谢。可能是因为你的数据集中有NA。试试DT2我试过了,但它忽略了整个数据帧/数据表。当我去计算平均值时,它给出了大多数输出的NaN,当我知道术前实例1术后1 NaN 2术后2 NaN 3术后3 NaN 4术后4+16.0000 5术前NaN 6 14.2414这可能是许多不同的原因造成的。你能做一个可复制的例子吗?杰普,这对样本数据有效。然而,当我把它应用到我的数据中时,它只会得到一些实例的总数,所以当我去计算平均值时,它只会返回平均值,例如“NA”和“postop2”。这可能是长格式融合的问题吗?任何关于从哪里开始寻找的建议都将不胜感激。谢谢。可能是因为你的数据集中有NA。试试DT2我试过了,但它忽略了整个数据帧/数据表。当我去计算平均值时,它给出了大多数输出的NaN,当我知道术前实例1术后1 NaN 2术后2 NaN 3术后3 NaN 4术后4+16.0000 5术前NaN 6 14.2414这可能是许多不同的原因造成的。你能举一个可复制的例子吗?