2017-04-06 5 views
0

Iを(a、b)はR:カラム名のリストによってグループ

joinedTable = a[b, on = columnName] 

私はCON基づいて行の組み合わせの頻度をカウントする2つの他のテーブル間の結合の結果であるデータテーブルを有しています変更可能な列名(すべて、途中の1つ)。問題は、それがハードコードではなく、変数とされて動作します:私はしようとした場合

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 

それはダイナミック私はこのエラーが出る:それが動作するように

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). 

は、それはどのようにすべきですか?

+0

この質問は話題にはなりません。私はプログラミングの問題を解決する方法を明確に求めています。 – Leo

+0

Getting Started wikiを使いましたか? https://github.com/Rdatatable/data.table/wiki/Getting-started – MichaelChirico

答えて

1

はすでに答えを発見し、それは誤りかなりシンプルかつ愚かだ:

この行は

joinedTable[, list(freq =.N), by = as.list(columns)] 
に変更する必要が

:列以来

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

すでに配列です。

+0

data.tableオブジェクトの '[]'の中で '。()'を使ってリストを表すことができるので、これを 'joinedTable [、。(freq = .N)、by = columns]'と書くこともできます。たぶんもっと簡潔かもしれない。 – lmo

+0

'by'を指定する多くのオプションがあります。 '?data.table'を参照してください。 – Frank

関連する問題