2015-09-07 10 views
6

data.tableを使用する列以外のすべての列でグループ化できますか?私はたくさんの列を持っているので、むしろすべてcolnamesを書くことを避けたいと思います。data.table - 1つの列を除くすべてのグループ

なぜなら、ある列が関連性を持たないことを知っているテーブルで重複を崩壊したいからです。 DT与えられた、ある

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 

、与えDT[, print(.SD), by = !collapse]などのようなものがあります:

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

を実際に.(N, val)を指定しなくては?列名をコピーして貼り付けることでこれを行うことができますが、これを行うためのエレガントな方法があると思いました。 1以外のすべての列によってグループ化するには

+0

を私はこれはほとんどこのhttp://stackoverflow.com/questions/29368785/how-to-pass-all-columns-except-oneのデュープだと思います-as-argument-to-setkey –

答えて

8

、あなたが使用することができます。

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

説明setdiffyにないxのすべての値を返すsetdiff(x, y)の一般的な形式をとります。この場合は、collapse-columnを除くすべての列名が返されることを意味します。


つの選択肢:

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

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

パーフェクト、ありがとう。どうやら私はこれを受け入れるのを待たなければならない。 –

関連する問題