2014-03-03 55 views
6

在检查data.table 1.9.2的新特性之后,我不太清楚NA/NaN/Inf操作的新特性。NA/NaN/Inf in data.table 1.9.2

消息:

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,

但是我失去了一点如何继续,以及这个新功能的目的是什么。你能举一个例子来说明这一点吗?

非常感谢!

回答

11

以前版本的data.tableNA, NaN,Inf值可能存在于密钥中,但您不能使用join或使用二进制扫描以与其他键值一致的方式选择这些行。

为解决这些问题(你可以通过追踪答案的历史特征data.table项目范围内的请求)的SO问题的例子见 Select NA in a data.table in Rdata.table subsetting by NaN doesn't work现在

,在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 
+0

太棒了!非常感谢@mnel! – Bigchao

+0

还有一个小问题,有没有办法使用。()方法同时选择“NaN”和“Inf”?谢谢! – Bigchao

+1

@BigChao。阅读data.table帮助文件。与选择其他两个值的方式相同。 – mnel