我有一个名为"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)
所以问题是:
mat[is.na(mat)] <- 0看起来像我想要的,但是有太多的值,所以我无法检查它们是否正常.| 归档时间: |
|
| 查看次数: |
1995 次 |
| 最近记录: |