我尝试NaN使用以下脚本用零替换值:
rapply( data123, f=function(x) ifelse(is.nan(x),0,x), how="replace" )
# [31] 0.00000000 -0.67994832 0.50287454 0.63979527 1.48410571 -2.90402836
Run Code Online (Sandbox Code Playgroud)
NaN值显示为零,但是当我输入数据框的名称并尝试查看它时,该值仍然保持为NaN.
data123$contri_us
# [31] NaN -0.67994832 0.50287454 0.63979527 1.48410571 -2.90402836
Run Code Online (Sandbox Code Playgroud)
我不确定该rapply命令是否实际应用了数据框中的调整,或者只是替换了所示的值.
知道如何将NaN值实际更改为零吗?
Hon*_*Ooi 81
is.nan与实际情况相比,似乎实际上没有数据框的方法is.na.所以,让我们解决这个问题!
is.nan.data.frame <- function(x)
do.call(cbind, lapply(x, is.nan))
data123[is.nan(data123)] <- 0
Run Code Online (Sandbox Code Playgroud)
小智 29
实际上,在R中,这个操作非常简单:
如果矩阵'a'包含一些NaN,您只需使用以下代码将其替换为0:
a <- matrix(c(1, NaN, 2, NaN), ncol=2, nrow=2)
a[is.nan(a)] <- 0
a
Run Code Online (Sandbox Code Playgroud)
如果数据框'b'包含一些NaN,则只需使用以下代码将其替换为0:
#for a data.frame:
b <- data.frame(c1=c(1, NaN, 2), c2=c(NaN, 2, 7))
b[is.na(b)] <- 0
b
Run Code Online (Sandbox Code Playgroud)
注意is.nan矩阵与is.na数据帧时的差异.
干
#...
b[is.nan(b)] <- 0
#...
Run Code Online (Sandbox Code Playgroud)
yield:Error in is.nan(b) : default method not implemented for type 'list'因为b是数据帧.
注意:编辑小但混乱的拼写错误
Mar*_*box 18
以下应该做你想要的:
x <- data.frame(X1=sample(c(1:3,NaN), 200, replace=TRUE), X2=sample(c(4:6,NaN), 200, replace=TRUE))
head(x)
x <- replace(x, is.na(x), 0)
head(x)
Run Code Online (Sandbox Code Playgroud)
这是一个tidyverse解决方案。我已经用NaN和生成了示例数据NA。第一列已完全完成。
df <- tibble(x = LETTERS[1:5],
y = c(1:3, NaN, 4),
z = c(rep(NaN, 3), NA, 5))
> df
# A tibble: 5 x 3
x y z
<chr> <dbl> <dbl>
1 A 1 NaN
2 B 2 NaN
3 C 3 NaN
4 D NaN NA
5 E 4 5
Run Code Online (Sandbox Code Playgroud)
然后我们可以将mutate_allwith应用replace到数据框:
> df %>%
+ mutate_all(~replace(., is.nan(.), 0))
# A tibble: 5 x 3
x y z
<chr> <dbl> <dbl>
1 A 1 0
2 B 2 0
3 C 3 0
4 D 0 NA
5 E 4 5
Run Code Online (Sandbox Code Playgroud)
我们NaN用零替换了值,既NA没有触及值也没有触及x列。