使用R在数组元素Q 中将variables名“QW1I5K20”存储起来

我有一个excel文件(.csv)的variables名称,如“QW1I1K5”的sorting列和数值对他们。
第1列变量名称,第2列:值
这个名单继续从1到15的W
我从1到4
K从1到30
总元素= 15 * 4 * 30 = 1800

我想将这些variables的数值存储在索引从variables名派生而来的数组中。
例如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与值

 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 

我build议看看使用“data.table”并将您的密钥设置为拆分列。 你可以使用我的“splitstackshape”函数中的cSplit来轻松地分割列。

样本数据:

 df <- data.frame( V1 = c("QW1I1K1", "QW1I1K2", "QW1I1K3", "QW1I1K4", "QW2I1K5", "QW2I3K2"), V2 = c(15, 20, 5, 6, 7, 9)) df # V1 V2 # 1 QW1I1K1 15 # 2 QW1I1K2 20 # 3 QW1I1K3 5 # 4 QW1I1K4 6 # 5 QW2I1K5 7 # 6 QW2I3K2 9 

分割列:

 library(splitstackshape) out <- cSplit(df, "V1", "[AZ]+", fixed = FALSE) setnames(out, c("V2", "W", "I", "K")) setcolorder(out, c("W", "I", "K", "V2")) setkey(out, W, I, K) out # WIK V2 # 1: 1 1 1 15 # 2: 1 1 2 20 # 3: 1 1 3 5 # 4: 1 1 4 6 # 5: 2 1 5 7 # 6: 2 3 2 9 

提取行:

 out[J(1, 1, 4)] # WIK V2 # 1: 1 1 4 6 out[J(2, 3, 2)] # WIK V2 # 1: 2 3 2 9