使用不同方法从data.table中选择列时的密钥保留

时间:2016-04-14 03:18:54

标签: r data.table

我遇到了一个意外(对我而来)问题,在data.table中对列进行了子集化。我试图在data.table的三列上使用unique。原始data.table包含几个(> 5)列,其中2个被设置为键。我使用unique的三列中的一列是关键列。令人惊讶的是,当我使用字符名称选择列时,与使用。()表示法选择列时,结果不同。这是一个复制我遇到的问题的小例子(注意:为简单起见,选择2列而不是3列)。

library(data.table)
dt1 <- data.table(c1 = rep(c("a", "a", "b"), each = 3), 
                   c2 = rep(1:3, each = 3),
                   c3 = rep(1:3, 3))
setkey(dt1, c1, c3)
unique(dt1[, c("c1", "c2"), with = FALSE])
   c1 c2
1:  a  1
2:  b  3
unique(dt1[, .(c1, c2)])
   c1 c2
1:  a  1
2:  a  2
3:  b  3

似乎使用c("c1", "c2")表示法的列选择会保留c1的键,但使用.(c1, c2)的列选择不会。有没有办法控制在对列进行子集化时是否保留密钥?

我的问题的更多背景。我试图在一个函数中执行此代码,该函数将数据和列名称选为参数。传递字符列名称更容易。

0 个答案:

没有答案