2017-12-29 28 views
0

Aufbau würde Ich mag eine Matrix mit bestimmten Werten für die Schleifeeine Matrix mit spezifischen Werten für die Schleife in R

  • Spaltennamen bauen: unique(flowdata$name)

  • Row Namen: unique(flowdata$attrs[which(flowdata$metadata=='name')])

  • Werte: die Meanvalue der outputGroup 0 und 2 *

Unten ist mein Code, aber wenn ich es laufen lasse, erhalte ich einen Fehler

Error in `[<-`(`*tmp*`, row.name, col.name, value = 6876) : 
    subscript out of bounds 

Die Matrix Ich möchte sagen, schaffen: für die erste Spalte „Essigsäure, ab Werk“, sollte es zurückgeben Wert von "1" für "Essigsäure, im Werk (in Reihe 1)" und "0,18841" für "Rückgewonnene Energie, bei der Essigsäureproduktion (in Reihe 2)".

Hier ist meine verkürzte Beispieldaten: 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 
+0

Sie werden wahrscheinlich schnelle Hilfe bekommen, wenn Sie eine * kleine * reproduzierbare Datenprobe in Frage stellen. Ist es wirklich so komplex, dass Sie die Leute bitten müssen, Tausende von Datenzeilen herunterzuladen, um das Problem zu veranschaulichen? Die meisten Probleme können mit weniger als 20 Datenzeilen dargestellt werden. – Gregor

+0

Sie werden feststellen, dass Sie eine bessere Hilfe und schnellere Hilfe auf der Website erhalten, wenn Sie (1) * kleine, kopier- und einfügbare * Beispieldaten bereitstellen, (2) beschreiben, was Sie in Worten tun, sowie Code und (3) zeigen Sie die gewünschte Ausgabe für Ihre Beispieleingabe an. Der Text Ihrer Frage beschreibt Ihre Daten, beschreibt jedoch nicht, was Ihr Code zu tun versucht. – Gregor

Antwort

0

output.mat Werte <> 0. Der Code gibt nicht ausgeführt werden, wie Sie zur Verfügung gestellt; jedoch. An einigen Stellen sagen Sie, dass Ihre Daten in "Flowdata" gespeichert sind, während sie an anderen Stellen in "Daten" gespeichert sind. Unten ist eine schnelle Lösung mit dem Out.

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 

print(output.mat) 

Ausgabe wie folgt aussieht:

          Acetic acid, at plant 
Acetic acid, at plant          1.00000 
Recovered energy, at acetic acid production    0.18841 
Acrylonitrile, at plant         0.00000 
Recovered energy, for acrylonitrile      0.00000 
             Acrylonitrile, at plant 
Acetic acid, at plant          0.0000000 
Recovered energy, at acetic acid production    0.0000000 
Acrylonitrile, at plant         1.0000000 
Recovered energy, for acrylonitrile      0.0051834 
Verwandte Themen