【问题标题】:Unique doesn't use keys as default anymoreUnique 不再使用默认键
【发布时间】:2017-03-02 19:47:38
【问题描述】:

我主要在 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 上运行良好。

【问题讨论】:

  • 那是因为你在两者上都有不同的 data.table 版本。在 Mac 上你有一个 ?unique 的文档,例如“默认情况下,所有列都在使用。最近为了与 data.frame 方法保持一致而对此进行了更改。在 ”。然后在您的 Windows 上尝试unique(e, by = "a")

标签: r data.table unique


【解决方案1】:

那是因为您在两者上都有不同的 data.table 版本。在 Mac 上你有一个

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

默认情况下,所有列都被使用。这是最近更改的 与 data.frame 方法的一致性。在版本

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

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

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

或者如 cmets 中提到的@Frank,您也可以使用unique(a, by = key(a))by 参数中指定键。

【讨论】:

  • 是的。更改也是为了明确需要by=key(),以便以后代码的读者会被提醒这种情况正在发生。之前,您必须知道如果在上游添加了密钥,它将改变unique 的行为。现在应该更健壮了。
猜你喜欢
  • 1970-01-01
  • 2019-11-19
  • 1970-01-01
  • 1970-01-01
  • 2018-11-08
  • 2019-06-20
  • 2018-07-27
  • 1970-01-01
相关资源
最近更新 更多