独特的不再使用键作为默认值

时间:2017-03-02 19:47:39

标签: r data.table unique

我主要在Mac上使用Rstudio。最近我不得不开始使用Windows。但是,我发现unique()不会在data.table中根据键提供唯一的行。这是一个例子:

a=c(2,3,3,3,3,5,6,7)
b=c("a","a","f","g","a","d","t","l")
e=data.table(a,b)
setkey(e, a)
key(e) # this works fine
unique(e) 

unique()仅删除整行的副本(第5行)。完全相同的代码在我的mac上正常运行。

1 个答案:

答案 0 :(得分:3)

那是因为你们两个都有不同的data.table版本。在Mac上你有一个< 1.9.8版本(它仍然使用密钥作为默认值),而在Windows上你有一个较新的版本(没有)。

?unique中所述(在data.table V1.9.8 +中):

  

默认情况下,正在使用所有列。这最近改变了   data.frame方法的一致性。在版本< 1.9.8违约是   密钥(x)的

意思是,从现在开始,即使您已经设置了密钥,也需要明确指定by变量,否则它将只使用所有列。

对于您的具体示例,这可行

unique(e, by = "a")
#    a b
# 1: 2 a
# 2: 3 a
# 3: 5 d
# 4: 6 t
# 5: 7 l

或者@Frank在评论中提到,您也可以使用byunique(a, by = key(a))参数中指定密钥。