R循环列以计算在不同子集中具有级别的行数

时间:2014-07-28 14:30:44

标签: r data.table

> 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

2 个答案:

答案 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