相关疑难解决方法(0)

data.table中的大整数.与1.8.10相比,分组结果在1.9.2中有所不同

我最近将data.table从1.8.10升级到1.9.2,并且在跨大整数分组时我发现两个版本之间存在以下差异.

是否有一个我需要在1.9.2中更改的设置,让以下两个组语句中的第一个像在1.8.10中那样工作(我认为1.8.10是正确的行为)?

另外,对于以下两个组语句中的第二个,两个包中的结果是相同的,但是预期的行为是什么?

1.8.10

>   library(data.table)
data.table 1.8.10  For help type: help("data.table")
>   foo = data.table(i = c(2884199399609098249, 2884199399608934409))
>   lapply(foo, class)
$i
[1] "numeric"

>   foo
                     i
1: 2884199399609098240
2: 2884199399608934400
>   foo[, .N, by=i]
                     i N
1: 2884199399609098240 1
2: 2884199399608934400 1
>   foo = data.table(i = c(9999999999999999999, 9999999999999999998))
>   foo[, .N, by=i]
                      i N
1: 10000000000000000000 2
> 
Run Code Online (Sandbox Code Playgroud)

并且1.9.2

>   library(data.table)
data.table 1.9.2  For help type: help("data.table")
>   foo = data.table(i = c(2884199399609098249, 2884199399608934409))
>   lapply(foo, class) …
Run Code Online (Sandbox Code Playgroud)

r data.table

7
推荐指数
1
解决办法
858
查看次数

在data.table v1.8.10 vs v1.9.2中对非常小的数字(例如1e-28)和0.0进行分组

我注意到R中data.table创建的频率表似乎没有区分非常小的数字和零?我可以更改此行为或这是一个错误吗?

可重复的例子:

>library(data.table)   
DT <- data.table(c(0.0000000000000000000000000001,2,9999,0))    
test1 <- as.data.frame(unique(DT[,V1]))   
test2 <-  DT[, .N, by = V1] 
Run Code Online (Sandbox Code Playgroud)

如您所见,频率表(test2)将无法识别0.0000000000000000000000000001和0之间的差异,并将两个观察值放在同一个类中.

Data.table版本:1.8.10
R:3.02

debugging r frequency data.table

4
推荐指数
1
解决办法
446
查看次数

在data.table中舍入POSIXct

使用此问题中的相同数据,在data.table v1.9.2中将日期时间舍入到第二个是一个问题.

require(data.table)
options(digits.secs=3)  # usually placed in .Rprofile
DT <- data.table(timestamp=c(as.POSIXct("2013-01-01 17:51:00.707"),
                             as.POSIXct("2013-01-01 17:51:59.996"),
                             as.POSIXct("2013-01-01 17:52:00.059"),
                             as.POSIXct("2013-01-01 17:54:23.901"),
                             as.POSIXct("2013-01-01 17:54:23.914")))
DT
DT[ , round(timestamp)]  # looks good
DT[ , timestamp_rounded := round(timestamp)]  # does not work
DT[ , timestamp_rounded := round(timestamp, units="secs")]  # does not work
DT
#                   timestamp timestamp_rounded
# 1: 2013-01-01 17:51:00.707       1,0,0,24,24
# 2: 2013-01-01 17:51:59.996    51,52,52,54,54
# 3: 2013-01-01 17:52:00.059    17,17,17,17,17
# 4: 2013-01-01 17:54:23.901         1,1,1,1,1
# 5: 2013-01-01 17:54:23.914         0,0,0,0,0
Run Code Online (Sandbox Code Playgroud)

我找到了一个解决方案lubridate …

r posixct data.table

2
推荐指数
1
解决办法
596
查看次数

标签 统计

data.table ×3

r ×3

debugging ×1

frequency ×1

posixct ×1