> x <- data.table( C1=c('a','b','c','d') )
> y <- data.table( C1=c('a','b','b','a') )
> f="C1"
> x[ C1 %in% unique(y$C1),]
C1
1: a
2: b
所以我可以看到y $ C1的级别为x $ C1包含2行。
> y[ C1 %in% unique(x$C1),]
C1
1: a
2: b
3: b
4: a
所以我可以看到x $ C1的等级为y $ C1覆盖了4行。
这有效,但我想为列名使用一个变量,以便在有很多列时可以构建一个循环。 以下不起作用:
> y[ f %in% unique(x$C1),]
Empty data.table (0 rows) of 1 col: C1
答案 0 :(得分:2)
这有效:
y[ get(f) %in% unique(x$C1),]
原因是f
本身引用了字符串"C1"
f
[1] "C1"
class(f)
[1] "character"
你需要引用列对象&#34; C1&#34;在data.table本身。
下面的说明了如何运作:
a <- seq(1:10)
b <- "a"
print(b)
[1] "a"
print(get(b))
[1] 1 2 3 4 5 6 7 8 9 10
答案 1 :(得分:2)
你也可以使用:
f <- quote(C1)
y[ eval(f) %in% unique(x$C1),]
# C1
#1: a
#2: b
#3: b
#4: a