我遇到了一个意外(对我而来)问题,在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)
的列选择不会。有没有办法控制在对列进行子集化时是否保留密钥?
我的问题的更多背景。我试图在一个函数中执行此代码,该函数将数据和列名称选为参数。传递字符列名称更容易。