2017-09-22 4 views
1

データテーブルの値を1つの列に集計する機能を作成しようとしましたが、列名に対してtoString()で引数を渡すことができません。次の例では、より良い、それを表示することができます。データテーブルの集計とtoString()の使用

t1 <- data.table(P = c("a", "b", "c", "d", "a", "b"), Q = 
c("1","2","3","4","5","6")) 

t1[ ,toString(Q), by = P] # this works 
t1[ ,toString(colnames(t1)[2]), by = P] # this does not give me the desired result 

私は上記と以下の結果が得られます。期待に比べて

P V1 
1: a Q 
2: b Q 
3: c Q 
4: d Q 

P V1 
1: a 1, 5 
2: b 2, 6 
3: c 3 
4: d 4 

私は引用符を削除しようとしていますnoquotes()を使用していますが、何も私のために働く。 誰かが間違っている箇所を指摘できますか?

答えて

2

我々は値

t1[ , toString(get(colnames(t1)[2])), by = P] 
# P V1 
#1: a 1, 5 
#2: b 2, 6 
#3: c 3 
#4: d 4 

それともeval/as.symbol

t1[, toString(eval(as.symbol(names(t1)[2]))), by = P] 

それとも.SDcols

t1[, toString(.SD[[1]]), by = P, .SDcols = names(t1)[2]] 
+0

おかげでたくさんで指定することであろう標準的な方法とを返すようにgetを使用することができます!しかし、noquote()を使用したときの違いは何ですか? – Ayush

+0

また、文字列がある場合はどうなりますか?私は引数として列名を渡す関数を作成する予定です。 – Ayush

+0

あなたはあなたの編集で2番目の答えをくれました、ありがとう! – Ayush

関連する問題