将数据帧转换为R中的4d阵列
我有一个名为fusion的患者数据集,它有4个类别的多列,即caseid(n=53)、judge(n=3)、method(n=5)和Technical(n=104)。我想把它拆分成一个4维数组,长度为53,3,5,4。现在,数据框的外观如下所示:将数据帧转换为R中的4d阵列,r,R,我有一个名为fusion的患者数据集,它有4个类别的多列,即caseid(n=53)、judge(n=3)、method(n=5)和Technical(n=104)。我想把它拆分成一个4维数组,长度为53,3,5,4。现在,数据框的外观如下所示: 'id' 'judge' 'method' 'technique1' 'technique2' 'technique3' .. 'technique107' A 1 M1 1
'id' 'judge' 'method' 'technique1' 'technique2' 'technique3' .. 'technique107'
A 1 M1 1.21 1.4 5.65
B 2 M2 45 43 6 23
C 3 M3 4 31 723
D 2 M4 55 73 823
E 1 M5 67 33 423
F 3 M2 33 93 28
G 1 M1 5 83 28
ZZ 1 .. .. .. ..
我希望数组维度名称与“caseid”、“judge”“method”“technology”匹配,而且由于每个案例都是唯一的,我希望53行中的每一行都有row.names=fusion$caseid。有人能帮忙吗?我一直在尝试plyr、申请等。。但是作为一个新手,我还没有成功。我们很乐意详细说明。我们可以
将数据集从wide
转换为long
格式,指定“id.var”列,使用带有dimnames
和dim
的“值”列,基于unique
值和unique
非数字列中的length
值,创建array
library(reshape2)
dM <- melt(d, id.var=c('id', 'judge', 'method'))
l1 <- lapply(dM[1:4], unique)
ar1 <- array(dM$value, dim=lengths(l1), dimnames=l1)
library(重塑2)
dM
d1 <- expand.grid(id= c(LETTERS, paste0(LETTERS, LETTERS), 'AAA'),
judge=1:3, method=paste0('M', 1:5))
set.seed(24)
d2 <- as.data.frame(matrix(rnorm(nrow(d1)*104), ncol=104,
dimnames=list(NULL, paste0('technique', 1:104))))
d <- cbind(d1, d2)