2015-09-07 13 views
6

Kann ich nach allen Spalten gruppieren, außer einer mit data.table? Ich habe viele Spalten, also würde ich lieber vermeiden, alle colnames zu schreiben.data.table - Gruppe nach allen außer einer Spalte

Der Grund ist, ich würde gerne Duplikate in einer Tabelle zusammenfassen, wo ich weiß, dass eine Spalte keine Relevanz hat.

library(data.table) 

DT <- structure(list(N = c(1, 2, 2), val = c(50, 60, 60), collapse = c("A", 
"B", "C")), .Names = c("N", "val", "collapse"), row.names = c(NA, 
-3L), class = c("data.table", "data.frame")) 

> DT 
    N val collapse 
1: 1 50  A 
2: 2 60  B 
3: 2 60  C 

heißt, DT gegeben wird, gibt es so etwas wie DT[, print(.SD), by = !collapse] die gibt: .(N, val) angeben zu müssen

> DT[, print(.SD), .(N, val)] 
    collapse 
1:  A 
    collapse 
1:  B 
2:  C 

ohne eigentlich? Ich weiß, dass ich das tun kann, indem ich die Spaltennamen kopiere und einfüge, aber ich dachte, dass es auch eine elegante Möglichkeit geben könnte, dies zu tun.

+0

ich das denke, ist fast eine Betrogene dieser http://stackoverflow.com/questions/29368785/how-to-pass-all-columns-except-one -as-argument-to-setkey –

Antwort

8

Zur Gruppe von allen Spalten mit einer Ausnahme, können Sie verwenden:

by = setdiff(names(DT), "collapse") 

Erklärung: setdiff die allgemeine Form von setdiff(x, y), die alle Werte von x zurückgibt, die nicht in y sind. In diesem Fall werden alle Spaltennamen mit Ausnahme der Spalte collapse zurückgegeben.


zwei Alternativen:

# with '%in%' 
names(dt1)[!names(dt1) %in% 'colB'] 

# with 'is.element' 
names(dt1)[!is.element(names(dt1), 'colB')] 
+0

Perfekt, danke. Anscheinend muss ich warten, um dies zu akzeptieren. –

Verwandte Themen