在 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
给定一个 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