2017-04-06 3 views
0

ich eine Datentabelle haben, die ein Ergebnis von einer zwischen zwei anderen Tabellen verknüpfen (a, b)R: Gruppe Liste der Spaltennamen

joinedTable = a[b, on = columnName] 

ich die Frequenz der Zeilen Kombinationen auf Basis con zählen möchten Spaltennamen, die variieren können (alle, einer irgendwo in der Mitte). Das Problem ist, es funktioniert fest einprogrammiert werden, aber nicht mit einer Variablen:

joinedTable[, list(freq =.N), by = list(COLUMN_A, COLUMN_B, ...)] # works 

# what's next doesn't 
columns = names(joinedTable)[-which(names(joinedTable) %in% c('COLUMN_F', 'COLUMN_G',...))] 
    joinedTable[, list(freq =.N), by = as.list(columns)] # doesn't work 

Wenn ich versuche, es zu tun dynamische ich diesen Fehler:

Error in `[.data.table`(joinedTable, , list(freq = .N), by = list(outColumns)) : 
    The items in the 'by' or 'keyby' list are length (13). Each must be same length as rows in x or number of rows returned by i (23). 

Wie sollte es so sein, dass es funktioniert?

+0

Diese Frage ist nicht off-topic. Ich frage ganz klar, wie man ein Programmierproblem lösen kann. – Leo

+0

Hast du das Erste-Schritte-Wiki durchlaufen? https://github.com/Rdatatable/data.table/wiki/Getting-started – MichaelChirico

Antwort

1

gefunden schon die Antwort und es ist ziemlich einfach und dumm der Fehler:

diese Linie

joinedTable[, list(freq =.N), by = as.list(columns)] 

Bedürfnisse geändert werden:

ist
joinedTable[, list(freq =.N), by = columns] 

seit Spalten bereits ein Array.

+0

Beachten Sie, dass innerhalb '[]' von data.table-Objekten Sie '.()' verwenden können, um eine Liste darzustellen, damit Sie könnte dies auch als 'joinedTable [,. (freq = .N), by = columns]' schreiben. Vielleicht ein wenig prägnanter. – lmo

+0

Es gibt viele Optionen zum Festlegen von 'by'. Siehe '? Data.table'. – Frank

Verwandte Themen