在 R 中的值替换过程中区分无穷大和负无穷大

Distinguishing between infinity and negative infinity during value replacement in R

提问人:Hack-R 提问时间:4/21/2016 最后编辑:CommunityHack-R 更新时间:11/3/2020 访问量:3368

问:

在这个线程中,有一些很好的例子,说明如何用 NA 替换 R 中的无限值。

例如

DT <- data.table(dat)
invisible(lapply(names(DT),function(.name) set(DT, 
           which(is.infinite(DT[[.name]])), j = .name,value =NA)))

但是,这并不能区分正 () 和负无穷大 ()。Inf-Inf

我需要做出这种区分,因为我想尝试将最大非无限值用于正无穷大,将最小非无穷大值用于负无穷大(以及类似的东西),而不是简单地用它们替换值并将它们扔掉或插补它们。NA

这可能吗?

示例输入数据

a <- c(-1,2,3,4,100/0,-100/0)

[1] -1 2 3 4 Inf -Inf

输出数据示例

[1] -1 1 2 3 4 4 -1

r 无穷大

评论


答:

11赞 csgillespie 4/21/2016 #1

为什么不直接与标准或比较相结合呢?is.infinite><

a <- c(-1,2,3,4,100/0,-100/0)

a[is.infinite(a) & a < 0] <- min(a[!is.infinite(a)])
a[is.infinite(a) & a > 0] <- max(a[!is.infinite(a)])
a
[1] -1  2  3  4  4 -1
1赞 martin 12/4/2018 #2

您可以以更简单的方式提取/替换向量中的任何 -Inf 或 Inf 值:

a <- c(-1,2,3,4,100/0,-100/0)   

a[a <= -Inf] <- min(a[is.finite(a)])    
a[a >= Inf] <- max(a[is.finite(a)])  

a
[1] -1  2  3  4  4 -1

评论

0赞 Shinobi_Atobe 12/5/2018
为什么不只是 ?a == -Inf