在data.table 1.9.2中的NA/NaN/Inf问题

6

在查看data.table 1.9.2的新功能后,我对NA / NaN / Inf操作的新特性不太清楚。

新闻如下:

现在,NA,NaN,+ Inf和-Inf被视为不同的值,可能是键中的值,可以连接并可以分组。 data.table定义:NA < NaN < -Inf

“可以连接并可以分组”是什么意思我不太清楚。

DT <- data.table(A=c(NA,NA,1:3), B=c("a",NA,letters[1:3]))

现在我们在A列和B列都有NA值,

但我有点迷茫该如何继续,并且不清楚这个新功能的目的是什么。您能否提供一个例子来说明一下?

非常感谢!

1个回答

11
在以前的版本中,data.table中可以存在NA, NaN, Inf值,但是您无法使用二进制扫描或join以与其他键值一致的方式选择这些行。
请参见Select NA in a data.table in Rdata.table subsetting by NaN doesn't work来了解处理这些问题的SO问题的示例(您可以通过data.table项目的答案跟踪历史)。
现在,在1.9.2(及以上版本)中,这些操作将起作用。
# an example data set
DT <- data.table(A = c(NA,NaN,Inf,Inf,-Inf,NA,NaN,1,2,3), 
              B =letters[1:10], key = 'A')
# selection using binary search
DT[.(Inf)]
#     A B
# 1: Inf c
# 2: Inf d
DT[.(-Inf)]
#       A B
# 1: -Inf e
# note that you need to use the right kind of NA
DT[.(NA_real_)]
#     A B
# 1: NA a
# 2: NA f
DT[.(NaN)]
#      A B
# 1: NaN b
# 2: NaN g
# grouping works
DT[,.N,by=A]
#       A N
# 1:   NA 2
# 2:  NaN 2
# 3: -Inf 1
# 4:    1 1
# 5:    2 1
# 6:    3 1
# 7:  Inf 2

太好了!非常感谢 @mnel! - Bigchao
有一个小问题,是否有一种方法可以使用.()方法同时选择“NaN”和“Inf”?谢谢! - Bigchao
1
@BigChao。阅读data.table帮助文件。选择任何其他两个值的方式相同。 - mnel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接