从R数据框列表中清除Inf值

时间:2017-04-10 19:14:46

标签: r dataframe

我一直在使用this response(我认为这是一个非常精心构建的答案),但我没有一个数据帧我有一个数据帧列表。所以,我一直试图这样做:

head(K[[1]])
        a    b   c
1981 0.76 0.93 NaN
1982  Inf 0.33 NaN
1983 0.25  Inf NaN
1984 0.77 0.73 Inf
1985  Inf 0.85 Inf
1986 0.63 0.56 NaN

K <- lapply(seq_along(K), function(i) for (j in 1:3) set(K[[i]], which(is.infinite(K[[i]][[j]])), j, NA))

基本上它应该替换列表K的每个元素中的Inf值,但我只得到这个结果:

str(K)

List of 200
 $ : NULL
 $ : NULL
 $ : NULL
 $ : NULL
...

函数内部的for循环在隔离时有效,但我无法获得具有无限数据帧的列表。

有什么建议吗? 问候。

1 个答案:

答案 0 :(得分:2)

如果K是数据框列表,则会生成一个新的已清理的data.frames列表。 Inf2NA函数用NA替换向量v中的所有无限值。

 Inf2NA <- function(v) replace(v, is.infinite(v), NA)
 lapply(K, function(d) replace(d, TRUE, sapply(d, Inf2NA)))

如果足以创建矩阵列表,那么这个较短的版本就足够了:

lapply(K, function(d) sapply(d, Inf2NA))