Mithilfe einer data.table, die die schnellste Möglichkeit wäre, eine Statistik über eine Auswahl von Spalten hinweg zu "fegen"?data.tables und Sweep-Funktion
Beginnend mit (deutlich größeren Versionen) DT
p <- 3
DT <- data.table(id=c("A","B","C"),x1=c(10,20,30),x2=c(20,30,10))
DT.totals <- DT[, list(id,total = x1+x2) ]
Ich mag folgendes data.table Ergebnis erhalten, indem Sie die Zielspalten Indizierung (2: p), um den Schlüssel zu überspringen:
id x1 x2
[1,] A 0.33 0.67
[2,] B 0.40 0.60
[3,] C 0.75 0.25
Danke für die Antwort. Ich habe ein Upgrade auf data.table 1.8.0 durchgeführt und den obigen Testcode erfolgreich ausgeführt. Ich bekomme eine ausführliche Warnung (wird hier nicht passen) über den Zwang zu verdoppeln, wenn sowohl Zähler als auch Nenner ganzzahlige Spalten aus data.tables sind. Ich werde die Frage zu diesem Zweck bearbeiten. –
Ich habe heute eine schwierige Zeit mit Änderungen: Kein Zeilenvorschub. Wie auch immer, hier ist der Code: für (j in 2: p) { gesetzt (dt, alle Zeilen, j, dt [[j]]/Nenn [[2]]) } und für beide dt und Nenn, Spalten 2 bis p sind ganze Zahlen. Die Warnung, die ich bekomme, ist –
"Warnmeldung: In Satz (dt, allrows, j, dt [[j]]/Nenn [[2]]): Coerced" Doppel "RHS zu" Ganzzahl ", um den Typ der Spalte zu entsprechen , kann abgeschnittene Genauigkeit haben Entweder ändern Sie die Zielspalte zuerst 'double' (indem Sie eine neue 'doppelte' Vektorlänge 16863 (nrows der gesamten Tabelle) erstellen und diese zuweisen; dh 'replace' -Spalte) oder RHS zu 'integer '(zB 1L, NA_ [real | integer] _, as. *, usw.), um Ihre Absicht klar und schnell zu machen. Oder stellen Sie den Spaltentyp korrekt ein, wenn Sie den Tisch erstellen und sich daran halten. " –