替换 R 中的 Inf data.table / 在列中显示 Inf 的数量
Replace Inf in R data.table / Show number of Inf in colums
我无法弄清楚如何使用 is.na(x) 之类的函数来处理 R 中的无限数和数据 table 或显示每列有多少个 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'
我在 this post 中找到了如何用 NA 替换 Inf,但我想说应该有更好的方法来实现这一点,例如 is.infinite。我想查看 Inf 的每列,对此有什么想法吗?
非常感谢。
BR蒂姆
is.finite
和 is.infinite
没有像 is.na
那样的 data.frame
或 data.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
)。
我无法弄清楚如何使用 is.na(x) 之类的函数来处理 R 中的无限数和数据 table 或显示每列有多少个 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'
我在 this post 中找到了如何用 NA 替换 Inf,但我想说应该有更好的方法来实现这一点,例如 is.infinite。我想查看 Inf 的每列,对此有什么想法吗?
非常感谢。 BR蒂姆
is.finite
和 is.infinite
没有像 is.na
那样的 data.frame
或 data.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
)。