簡體   English   中英

r - 將變量作為data.table列名傳遞

[英]r - passing variables as data.table column names

我用的越多,越data.table正在取代dplyr作為我的“轉到”包,因為它提供的速度是一大利好。

你可以在data.table( dt[i,j] )中將變量傳遞給i而不創建expression嗎?

給出data.table:

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

我已經閱讀了很多問題 ,通過表達式顯示了這樣做的方法:

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

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

   val1 val2
1:    3    1

但是我想知道是否有一種更“直接”的方式來做到這一點,我錯過了,類似於:

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

或者是expression方式應該如何完成?

我們可以使用eval(as.name(..

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

或者我們可以在.SDcols指定它

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

或者使用@thelatemail get的選項

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

如果只有兩個元素,我們也可以使用Reduce with mget (@thelatemail答案的略微變化)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM