R 重塑数据帧的问题

R 重塑数据帧的问题,r,reshape,reshape2,R,Reshape,Reshape2,我有一个关于重塑2的铸造和熔化功能的问题(我想) 我有一个数据集,每行一名患者,所有观察分两列(分别针对观察者x和y) 编辑:-我对示例数据做了一点修改,以更好地模拟我的真实数据,因为变量已经在患者的多个层面上进行了测试- 看起来是这样的: data <- data.frame(letters[1:2], 1:2, 3:4, 5:6, 7:8, 9:10, 11:12, 13:14, 15:16 ) colnames(data) <- c("pat_id", "var1_1_x",

我有一个关于重塑2的铸造和熔化功能的问题(我想)

我有一个数据集,每行一名患者,所有观察分两列(分别针对观察者x和y)

编辑:-我对示例数据做了一点修改,以更好地模拟我的真实数据,因为变量已经在患者的多个层面上进行了测试-

看起来是这样的:

data <- data.frame(letters[1:2], 1:2, 3:4, 5:6, 7:8, 9:10, 11:12, 13:14, 15:16 )
colnames(data) <- c("pat_id", "var1_1_x", "var1_1_y", "var1_2_x", "var1_2_y", "var2_1_x", "var2_1_y", "var2_2_x", "var2_2_y")
data
当我使用

dataM <- melt(data, id="pat_id")
dataM
  • 编辑2结束

也许我完全忽略了显而易见的解决方案,如果有人能帮上忙,我会非常感激

这更像是base R的
重塑功能:

reshape(data, direction = "long", idvar="pat_id", 
        varying = 2:ncol(data), v.names=c("x", "y"), 
        times=c("var_1", "var_2"))
#         pat_id  time x y
# a.var_1      a var_1 1 4
# b.var_1      b var_1 2 3
# c.var_1      c var_1 3 2
# d.var_1      d var_1 4 1
# a.var_2      a var_2 5 8
# b.var_2      b var_2 6 7
# c.var_2      c var_2 7 6
# d.var_2      d var_2 8 5

为了记录在案,以下是您必须对“重塑2”所做的操作:


谢谢你的回答。我认为我的问题是“特殊的”(我们都有,不是吗?),因为我想基于colnames/变量名进行拆分。我使用的是您的解决方案,使用的是reforme2。我忘了提到,在我的实际数据中,解决方案中的“V”列也需要在最终结果中。我做了您在“cbinding”dataM之前做的事情,然后做:
dcast(dataM,pat\u id+V+var~observer,value.var=“value”)
。我得到了一个具有正确维度的数据框,通过示例数据,我得到了正确的结果,但是,当我使用真实数据时,观察者x和y列中的值都更改为“1”?我不知道一开始我到底做错了什么,但这可能与一个观察者中的一些缺失患者有关。经过更多的尝试后,我不知何故使用了Reformae2
melt
dcast
,特别是@Ananda Mahto解释的
colsplit
函数,获得了我想要的。就我个人而言,我不可能想到那会是解决办法。所以,非常感谢阿南达!
str(dummmy_melt)
'data.frame':   299008 obs. of  3 variables:
$ DesirNr : Factor w/ 584 levels "1001","1002",..: 10 20 31 41 43 44 45 46 47 57 ...
$ variable: Factor w/ 512 levels "X.1_F","ReaderNr.1_F",..: 1 1 1 1 1 1 1 1 1 1 ...
$ value   : Factor w/ 1024 levels "01 01 MRI.pdf",..: 1 2 3 4 5 6 7 8 9 10 ...

str(dummy_split)
'data.frame':   299008 obs. of  6 variables:
$ DesirNr : Factor w/ 584 levels "1001","1002",..: 10 20 31 41 43 44 45 46 47 57 ...
$ variable: Factor w/ 512 levels "X.1_F","ReaderNr.1_F",..: 1 1 1 1 1 1 1 1 1 1 ...
$ value   : Factor w/ 1024 levels "01 01 MRI.pdf",..: 1 2 3 4 5 6 7 8 9 10 ...
$ observer: chr  "F" "F" "F" "F" ...
$ afwijk  : chr  "X" "X" "X" "X" ...
$ level   : int  1 1 1 1 1 1 1 1 1 1 ...
reshape(data, direction = "long", idvar="pat_id", 
        varying = 2:ncol(data), v.names=c("x", "y"), 
        times=c("var_1", "var_2"))
#         pat_id  time x y
# a.var_1      a var_1 1 4
# b.var_1      b var_1 2 3
# c.var_1      c var_1 3 2
# d.var_1      d var_1 4 1
# a.var_2      a var_2 5 8
# b.var_2      b var_2 6 7
# c.var_2      c var_2 7 6
# d.var_2      d var_2 8 5
library(reshape2)
dataM <- melt(data, id="pat_id")
dataM <- cbind(dataM, colsplit(dataM$variable, "_", c("V", "var", "obs")))
dcast(dataM, pat_id + var ~ obs, value.var="value")
#   pat_id var x y
# 1      a   1 1 4
# 2      a   2 5 8
# 3      b   1 2 3
# 4      b   2 6 7
# 5      c   1 3 2
# 6      c   2 7 6
# 7      d   1 4 1
# 8      d   2 8 5
library(splitstackshape)
Reshape(data, id.vars="pat_id", var.stubs=c("x", "y"), sep="_")