在 data.table 中使用 unique 的意外结果

Unexpected result using unique inside a data.table

给定一个 data.table(版本 1.9.5)

TEST <- data.table(1:20,rep(1:5,each=4, times=1))

如果我运行这个:

TEST[unique(V2)]

我得到这个结果:

   V1 V2
1:  1  1
2:  2  1
3:  3  1
4:  4  1
5:  5  2

这真的是预期的行为还是错误? 还是我没有正确使用它?

我正在阅读 "R book",在一个示例中,他们使用 TEST[unique(Vegetation),] 并说它旨在 select 植被唯一的行子集。

我希望得到类似的东西

   V1  V2
1:  1   1
2:  5   2
3:  9   3
4:  13  4
5:  16  5

虽然我知道这需要指定一个聚合条件。

TEST[,unique(V2)] 给出 [1] 1 2 3 4 5。因为 TEST[1:5] 应该给你前 5 行,这就是你得到的,所以没有错误。

要获得预期结果,您可以这样做:

TEST[!duplicated(V2)]
#   V1 V2
#1:  1  1
#2:  5  2
#3:  9  3
#4: 13  4
#5: 17  5

或者这个:

TEST[, V1[1], by = V2]
#   V2 V1
#1:  1  1
#2:  2  5
#3:  3  9
#4:  4 13
#5:  5 17

或者正如@Arun 提醒我的那样,现在 unique 有一个 data.table 方法:

unique(TEST, by="V2")
#   V1 V2
#1:  1  1
#2:  5  2
#3:  9  3
#4: 13  4
#5: 17  5