我有一个 excel 文件 (.csv),其中包含变量名称的排序列,例如“QW1I1K5”和针对它们的数值。
这个列表继续
W 从 1 到 15
我从 1 到 4
K 从 1 到 30
总元素 = 15*4*30 = 1800
我想将这些变量的数值存储在一个数组中,该数组的索引是从变量 name 派生的。
例如 QW1I1K5 的值为 11 。这必须存储在数组元素 Q[1,1,5] = 11 (索引集 [1,1,5] 对应于 W1 , I1 , K5 )
最佳答案
可能这有帮助
Q <- array(dat$Col2, dim=c(15,4,30))
dat$Col2[dat$Col1=='QW1I1K5']
#[1] 34
Q[1,1,5]
#[1] 34
dat$Col2[dat$Col1=='QW4I3K8']
#[1] 38
Q[4,3,8]
#[1] 38
如果你想要
index
连同值(value)观library(reshape2)
d1 <- melt(Q)
head(d1,3)
# Var1 Var2 Var3 value
#1 1 1 1 12
#2 2 1 1 9
#3 3 1 1 29
Q[1,1,1]
#[1] 12
Q[3,1,1]
#[1] 29
更新
假设,您的数据位于
order
正如您在评论中描述的那样,将是 dat1
indx <- read.table(text=gsub('[^0-9]+', ' ', dat1$Col1), header=FALSE)
dat2 <- dat1[do.call(order, indx[,3:1]),]
Q1 <- array(dat2$Col2,dim=c(15,4,30))
Q1[1,1,2]
#[1] 20
dat2$Col2[dat2$Col1=='QW1I1K2']
#[1] 20
数据
Col1 <- do.call(paste,c(expand.grid('QW', 1:15, 'I', 1:4, 'K',1:30),
list(sep='')))
set.seed(24)
dat <- data.frame(Col1, Col2=sample(1:40, 1800,replace=TRUE))
dat1 <- dat[order(as.numeric(gsub('[^0-9]+', '', dat$Col1))),]
row.names(dat1) <- NULL
关于arrays - 使用 R 将变量名称 "QW1I5K20"的值存储在数组元素 Q[1,5,20] 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27683984/