【发布时间】:2013-11-30 12:31:35
【问题描述】:
我有一个关于 reshape2 的 cast 和 melt 功能的问题(我认为)。
我有一个数据集,每行有一个患者,所有观察都在列中两次(观察者 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
为了分析,我希望每个观察者有一列,其中包含所有变量的所有值。所以它看起来像这样(对不起,糟糕的桌子):
pat.id variable level obs_x obs_y
a var1 1 1 3
b var1 1 2 4
a var1 2 5 7
b var1 2 6 8
a var2 1 9 11
b var2 1 10 12
a var2 2 13 15
b var2 2 14 16
当我使用时
dataM <- melt(data, id="pat_id")
dataM
我最终得到一个暗淡 3 x 16 的数据框,所有值在一列中。我似乎无法将两个观察者的价值观分开。
我还尝试使用“grep”函数将 obs_x 和 obs_y 中的所有列分别“rbind”到一个新的数据帧中,并从带有 x 和 y 值的熔融数据集行中“cbind”,但有些变量名称在其名称中包含 x 和 y。
编辑:-我希望这不会使我的问题过于复杂。我尝试使用reshape2 函数来融合数据,而不是基于下划线的colsplit,它工作得很好。当我dcast 带有示例数据的数据框时它也可以工作,但是当我在我的真实数据(原始尺寸 600x250)上使用它时它不会:尺寸和列名工作正常,但观察者 x 和y 更改为“1”,我不明白为什么。 -
编辑 2:- 我将真实数据重命名为 dummy
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 ...
- 编辑 2 结束。
也许我完全忽略了明显的解决方案,如果有人有帮助,我将不胜感激!
【问题讨论】:
-
感谢您的回答。我认为我的问题是“特殊的”(我们都这样做,不是吗?)因为我想根据 colnames/variable 名称进行拆分。