我必須處理大量的數據集,這就是爲什麼我必須使用data.table包。我想只挑選給定列中具有適當值的行。如果列名是一個字符串,按行選擇
dt <- data.table(a = rep(c("A", "B", "C"), 3),
b = 1:9)
n <- c("A", "C")
我能做些什麼:
dt[ a %in% n]
a b
1: A 1
2: C 3
3: A 4
4: C 6
5: A 7
6: C 9
如果我不知道以前列的名稱和功能,把它作爲字符串?我試過了:
dt[ "a" %in% n]
Empty data.table (0 rows) of 2 cols: a,b
dt[ "a" %in% n, with = F]
Error in `[.data.table`(dt, "a" %in% n, with = F) :
j must be provided when with=FALSE
dt[ as.name("a") %in% n ]
Error in match(x, table, nomatch = 0L) :
'match' requires vector arguments
問題 - 是否可以在這樣的任務中使用字符串?
嘗試'dt [n,on =「a」]'或'dt [eval(as.name(「a」))%in%n]'或'setkeyv (dt,「a」)[n]' –
@David也可以做出答案。我認爲'eval'應該在整個'i'上,而不僅僅是名稱,以便使用autoindexing。 – Frank
@Frank我們有沒有對這個地方有一些欺騙?也許[這](http://stackoverflow.com/questions/27677283/evaluating-both-column-name-and-the-target-value-within-j-expression-within-d)? –