2015-10-08 4 views
7

私が使用するほど、dplyrdplyrを私の 'goto'パッケージに置き換えています。r - data.table列名として変数を渡す

あなたはexpressionを作成withouth data.table(dt[i,j])にiに変数を渡すことができ

質問?

考えるdata.table:私はevalulateしたい

library(data.table) 
dt <- data.table(val1 = c(1,2,3), 
       val2 = c(3,2,1)) 

dt[(val1 > val2)] 

が、列名を参照するために変数を使用しました。例えば、

myCol <- c("val1", "val2") ## vector of column names 

は、私が読んだ表現でこれを行う方法を示しlots of questions

## create an expression to evaluate 
expr <- parse(text = paste0(myCol[1], " > ", myCol[2])) 

## evaluate expression 
dt[(eval(expr))] 

    val1 val2 
1: 3 1 

しかし、私はこれを行うために、より「直接的」方法があるかどう思っていたが、私、何かに似逃した」VEの:

dt[(myCol[1] > myCol[2])] 

をかexpressionルートは、これが行われるべき方法は何ですか?

答えて

6

我々はeval(as.name(..

dt[eval(as.name(myCol[1]))> eval(as.name(myCol[2]))] 

使用することができますそれとも.SDcols

dt[dt[, .I[.SD[[1]]> .SD[[2]]], .SDcols= myCol]] 

または2つだけがある場合@thelatemail

dt[get(myCol[1]) > get(myCol[2])] 

getを使用してオプションで指定することができます要素の場合は、Reduceとを使用することもできますおかげ@thelatemail(@のthelatemailの答えのわずかな変化)

dt[Reduce('>', mget(myCol))] 
+0

、これを追加しました。 – akrun

+0

'eval(as.name(...))== get()'と言うのは正しいでしょうか? – tospig

+1

@tospig [link](http://adv-r.had.co.nz/Expressions.html)は、より多くのアイデアを提供します。 – akrun

関連する問題