[英]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.