2015-09-07 22 views
6

data.table'u kullanarak bir sütun hariç tüm sütunları gruplayabilir miyim? Çok fazla sütunum var, bu yüzden tüm colnames'u yazmayı tercih ederim.data.table - tek sütun hariç hepsi bir grup

Bir tablonun bir ilişkisinin olmadığını bildiğim bir tablodaki kopyaları daraltmak istememin nedeni.

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

aslında .(N, val) belirtmek zorunda kalmadan:

, DT verilir
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 

verir DT[, print(.SD), by = !collapse] benzeri gibi bir şey var mı? Bunu kopyalayarak ve sütun isimlerini yapıştırarak yapabileceğimin farkındayım, ama bunun için de bazı şık bir yol olabileceğini düşündüm. Biri dışında tüm sütunlar göre gruplandırmak için

+0

http://stackoverflow.com/questions/29368785/how-to-pass-all-columns-except-one bu neredeyse bir dupe olduğu -as-argüman-setkey –

cevap

8

, şunları kullanabilirsiniz:

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

Açıklama: setdiffx bütün değerlerini döndürür setdiff(x, y) genel halini alır y içinde olmadıklarını. Bu durumda, tüm sütun adlarının collapse -kolol dışında döndüğü anlamına gelir.


iki alternatif: Ben bu düşünüyorum

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

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

Mükemmel, teşekkürler. Görünüşe göre bunu kabul etmek için beklemek zorundayım. –

İlgili konular