在R

时间:2016-04-20 19:27:22

标签: r infinity

有一些很好的例子说明如何用this thread中的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

2 个答案:

答案 0 :(得分:9)

为什么不将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 :(得分:1)

您可以以更简单的方式提取/替换向量中的任何-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