【发布时间】:2017-12-29 19:45:05
【问题描述】:
我想在 R 中使用 for 循环构建具有特定值的矩阵。
列名:
unique(flowdata$name)行名:
unique(flowdata$attrs[which(flowdata$metadata=='name')])Values:outputGroup 0 和 2.*
的 meanValue
下面是我的代码,但是当我运行它时,我得到一个错误提示
Error in `[<-`(`*tmp*`, row.name, col.name, value = 6876) :
subscript out of bounds
我要创建的矩阵:对于第一列“乙酸,植物”,它应该为“乙酸,植物(第 1 行)”返回值“1”,“0.18841”为“回收的能量,乙酸生产(第 2 行)"。
这是我缩短的示例数据:https://www.dropbox.com/s/10it07wqzfwctd6/Data_Sample.txt?dl=0
n.up = length(unique(flowdata$name)) # number of unit processes
n.p = length(unique(flowdata$attrs[which(flowdata$metadata=='name')]))
#number of inputs/outputs
output.mat <- matrix(0,n.p,n.up) #empty matrix
colnames(output.mat) <- unique(flowdata$name) # up names
rownames(output.mat) <-
unique(flowdata$attrs[which(flowdata$metadata=='name')])
# inputs/outputs names
# check output.mat size
data <- flowdata
for (i in 1:nrow(data)){ # for every row in data
if ((data$metadata[i]=='outputGroup' && data$attrs[i] == 0) ||
(data$metadata[i]=='outputGroup' && data$attrs[i] == 2)){ # if it is an
#output and it is a reference product or a co-product
col.name <- data$name[i] # up name
row.name <- data$attrs[i-4] # i/o name
value <- as.numeric(data$attrs[i-5]) #value
output.mat[row.name,col.name] <- value
}
}
output.mat <- output.mat[-which(rowSums(output.mat)==0),] # if the row is
#empty, then the flow was an input or output of no interest
【问题讨论】:
-
如果您在问题中发布 small 可重现的数据样本,您可能会获得更快的帮助。真的那么复杂,需要让人去下载几千行数据来说明问题吗?大多数问题可以用不到 20 行数据来说明。
-
如果您 (1) 提供 小型、可复制/粘贴 示例数据,(2) 描述您在文字和代码中所做的事情,以及 (3) 为您的示例输入显示所需的输出。您的问题文本描述了您的数据,但根本没有描述您的代码试图做什么。