替换 R 数据表中的 Inf / 以列为单位显示 Inf 的数量



我不知道如何将类似 is.na(x) 的函数用于 R 中的无限数字和数据表或显示每列有多少个 Inf:colSums(is.infinite(x))

我使用以下示例数据集:

DT <- data.table(a=c(1/0,1,2/0),b=c("a","b","c"),c=c(1/0,5,NA))
DT
a b   c
1: Inf a Inf
2:   1 b   5
3: Inf c   NA
colSums(is.na(DT))
a b c 
0 0 1 
colSums(is.infinite(DT))
Error in is.infinite(DT) : default method not implemented for type 'list'
DT[is.na(DT)] <- 100
DT
a b   c
1: Inf a Inf
2:   1 b   5
3: Inf c 100
DT[is.infinite(DT)] <- 100
Error in is.infinite(DT) : default method not implemented for type 'list'

我在这篇文章中发现了如何用 NA 替换 Inf,但我想说应该有更好的方法来实现这一目标,例如 is.infinite 。我想看看每列的 Inf,对此有什么想法吗?

非常感谢。 BR 蒂姆

is.finiteis.infinite没有像is.na那样data.framedata.table方法(比较methods(is.infinite)methods(is.na))

您也可以循环遍历列,然后使用colSums

DT[, colSums(sapply(.SD, is.infinite))]
# a b c 
# 2 0 1 

或者,您可以使用Reduce而不是colSums

DT[, Reduce(`+`, lapply(.SD, is.infinite))]
## [1] 2 0 1

另一种选择是创建自己的自定义函数,然后将其遍历列

Myfunc <- function(x) sum(is.infinite(x))
DT[, lapply(.SD, Myfunc)]
#    a b c
# 1: 2 0 1

当然,您也可以为is.infinite编写data.frame方法,因为它似乎是通用的(请参阅?is.infinite)。

最新更新