快速更换NA - 错误或警告

Mar*_*ová 5 r dataframe na

我有一个名为"mat"的49952 obs的大数据框.7597变量,我试图用零替换NA.以下是我的data.frame的示例:

    A   B   C   E   F   D   Q   Z   . . .
1   1   1   0   NA  NA  0   NA  NA
2   0   0   1   NA  NA  0   NA  NA
3   0   0   0   NA  NA  1   NA  NA
4   NA  NA  NA  NA  NA  NA  NA  NA
5   0   1   0   1   NA  0   NA  NA 
6   1   1   1   0   NA  0   NA  NA
7   0   0   1   0   NA  1   NA  NA 
.
.
.
Run Code Online (Sandbox Code Playgroud)

我需要真正的快速工具来替换它们.结果应如下所示:

    A   B   C   E   F   D   Q   Z   . . .
1   1   1   0   0   0   0   0   0
2   0   0   1   0   0   0   0   0 
3   0   0   0   0   0   1   0   0
4   0   0   0   0   0   0   0   0
5   0   1   0   1   0   0   0   0 
6   1   1   1   0   0   0   0   0
7   0   0   1   0   0   1   0   0 
.
.
.
Run Code Online (Sandbox Code Playgroud)

我已经尝试过lapply(mat, function(x){replace(x, is.na(x),0)})- 没有用 - mat[is.na(mat)] <- 0- 错误,而且可能太慢 - 而且链接 - 也没有用.

@Sotos已经建议我,plyr::rbind.fill(lapply(L, as.data.frame))但它不起作用,因为它使data.frame的379485344观察和1变量(这是49952x7597),所以我还要将其转换回来.有没有更好的方法来做到这一点?

我的data.frame的真实结构:

> str(mat)
'data.frame':   49952 obs. of  7597 variables:
 $ 6794602   : num  1 NA NA NA NA 0 0 0 0 0 ...
 $ 1008667   : num  NA 1 0 NA NA 0 0 0 0 0 ...
 $ 8009082   : num  NA 0 1 NA NA NA NA NA NA NA ...
 $ 6740421   : num  NA NA NA 1 NA 0 0 0 0 0 ...
 $ 6777805   : num  NA NA NA NA 1 NA NA NA NA NA ...
 $ 1001682   : num  NA NA NA NA NA 0 0 0 0 0 ...
 $ 1001990   : num  NA NA NA NA NA 0 0 0 0 0 ...
 $ 1002541   : num  NA NA NA NA NA 0 0 0 0 0 ...
 $ 1002790   : num  NA NA NA NA NA 0 0 0 0 0 ...
Run Code Online (Sandbox Code Playgroud)

注意:

当我尝试时mat[is.na(mat)] <- 0有一个警告:

> mat[is.na(mat)] <- 0
Warning messages:
1: In `[<-.factor`(`*tmp*`, thisvar, value = 0) :
  invalid factor level, NA generated
2: In `[<-.factor`(`*tmp*`, thisvar, value = 0) :
  invalid factor level, NA generated
> nlevels(mat)
[1] 0
Run Code Online (Sandbox Code Playgroud)

使用后的Data.frame垫mat[is.na(mat)] <- 0:

> str(mat)
'data.frame':   49952 obs. of  7597 variables:
 $ 6794602   : num  1 0 0 0 0 0 0 0 0 0 ...
 $ 1008667   : num  0 1 0 0 0 0 0 0 0 0 ...
 $ 8009082   : num  0 0 1 0 0 0 0 0 0 0 ...
 $ 6740421   : num  0 0 0 1 0 0 0 0 0 0 ...
 $ 6777805   : num  0 0 0 0 1 0 0 0 0 0 ...
 $ 1001682   : num  0 0 0 0 0 0 0 0 0 0 ...
 $ 1001990   : num  0 0 0 0 0 0 0 0 0 0 ...
 $ 1002541   : num  0 0 0 0 0 0 0 0 0 0 ...
 $ 1002790   : num  0 0 0 0 0 0 0 0 0 0 ...
Run Code Online (Sandbox Code Playgroud)

所以问题是:

  1. 有没有其他快速的方法来取代NA?
  2. 这个警告很重要吗?因为使用后的数据mat[is.na(mat)] <- 0看起来像我想要的,但是有太多的值,所以我无法检查它们是否正常.

Sag*_*gar 7

请尝试以下方法:

mat %>% replace(is.na(.), 0)
Run Code Online (Sandbox Code Playgroud)