【发布时间】:2019-12-12 12:52:20
【问题描述】:
如何遍历数据框并检查每个单元格中的 Inf 和 NA 值。如果单元格中有 Inf 或 NA 值,则将其更改为值 0。
这是一个示例数据框
testdf <- data.frame(b1 = c(1,Inf,5,7,8,9,200,736, Inf, Inf),
b2 = c(2,3,Inf, NA,4,78,23,567,9114,94),
b3 = c(23,45,86,1236,78,Inf,324,2100,49,10))
> testdf
b1 b2 b3
1 1 2 23
2 Inf 3 45
3 5 Inf 86
4 7 NA 1236
5 8 4 78
6 9 78 Inf
7 200 23 324
8 736 567 2100
9 Inf 9114 49
10 Inf 94 10
【问题讨论】:
-
您可以使用
testdf[sapply(testdf, is.infinite) | is.na(testdf)] <- 0。除了is.infinite()没有 data.frame 方法之外,这是一个常见的骗局。 -
我警告不要随意将
NA转换为0,因为这会改变数据的含义。例如,NA表示 “我没有数据” 或 “这不适用”,而找到 0 表示 “有数据对于这个单元格,它是零”。这显然是上下文相关的,但我很少将非数字转换为数字,无论是 0、1 还是其他数字。 (估算的行为有时是必要的,当然。)
标签: r