2016-07-06 11 views
0

Ich habe eine Tabelle, die wie folgt aussehen:Looping arithmetische Berechnung zwischen Tabellen

table1 

      Not Visible Visible <NA> 
All   0.29  0.50 0.20 
Bowtie  0.24  0.17 0.59 
Cola   0.15  0.83 0.02 
Squig   0.49  0.51 0.49 

ich dann 9 ähnliche Tabellen haben. Unten ist ein Beispiel:

table2 

      Not Visible Visible <NA> 
All   0.28 0.50 0.23 
Bowtie  0.11 0.30 0.59 
Cola   0.30 0.67 0.03 
Squig   0.42 0.51 0.06 

ich das Ergebnis von table1 - table2 wie unten will, aber ich will auch Tabelle 1 mit jedem der anderen 9 Tabellen.

 Not Visible Visible <NA> 
All   0.01 0.00 -0.03 
Bowtie  0.13 -0.13 0.00 
Cola   -0.15 0.16 -0.01 
Squig   0.07 0.00 0.43 

Wie kann ich dies tun, ohne Table 1 - table 2; table 1 - table 3; table 1 - table 4 Schreiben etc? Wenn ich mit dem Code (als Beispiel) versuchen, Looping, erhalte ich das nicht-numerische Argument Binärfehlerquote:

Tables <- c("table1", "table2") ## as an example 

for (r in Tables) { 

yy <- paste(r,"res", sep = "-") 
    zz <- table1-r 
    assign(yy,zz) 

} 

Irgendwelche Ideen?

Antwort

1

Betrachten Sie eine Liste der Tabellen (nicht die Stringliterale ihrer Namen) und dann lapply() verwenden, wo Liste ergeben, können als einzelne Tabellen oder binded in Datenrahmen gespeichert werden:

# LIST OF TABLES WITH NAMED ELEMENTS (t1 NOT INCLUDED) 
tables <- setNames(list(t2, t3, t4, t5, t6, t7, t8, t9), 
        c("table2", "table3", "table4", "table5", 
        "table6", "table7", "table8", "table9")) 

# ITERATIVELY SUBTRACT FROM t1 
tableList <- lapply(tables, function(x) t1 - x) 

# SAVE EACH TABLE AS SEPARATE OBJECTS 
list2env(tableList, envir=.GlobalEnv) 

# DATAFRAME BINDING - WIDE FORMAT (INCLUDING t1) 
df <- as.data.frame(cbind(t1, do.call(cbind, tableList))) 

# DATAFRAME BINDING - LONG FORMAT (INCLUDING t1) 
df <- as.data.frame(rbind(t1, do.call(rbind, tableList))) 
+0

Danke Parfait, das war sehr umfangreich! – Bonono

+0

Sie wetten! Froh, dass ich Helfen kann. – Parfait

0

Sie könnten versuchen, diese ohne Looping

z=names(table1) 

table3 = table1[z]-table2[z] 
+0

Nein, das hat nicht funktioniert (nach 'as.data.frame' Nötigung), gab einen Vektor von' NA NA NA' – Bonono