我有一个很大的data.frame被称为49952 obs的“mat”。 7597个变量,我试图用零代替NAs。这里是我的data.frame如何如何:NA的快速替换 - 一个错误或警告
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
.
.
.
我需要一个快速的工具来取代它们。结果应该是这样的:
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
.
.
.
我已经尝试过lapply(mat, function(x){replace(x, is.na(x),0)})
- 没有工作 - mat[is.na(mat)] <- 0
- 错误,也许太慢 - 也link - 没有工作过。
@Sotos已经建议我plyr::rbind.fill(lapply(L, as.data.frame))
但它没有工作,因为它使data.frame的379485344观察值和1变量(这是49952x7597),所以我也必须trafnsform它回来。有没有更好的方法来做到这一点?
我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 ...
注:
,当我试图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
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 ...
所以问题是:
- 是否有更换NA任何其他快捷的方式?
- 是警告大不了的?由于使用
mat[is.na(mat)] <- 0
后的数据看起来像我想要的,但数值太多,所以我无法检查它们是否正确。
'垫[is.na(垫)] = 0'应该是最快的方法,手向下(上稠密矩阵)。如果不是,这是R中的一个明显错误... –
这是一个警告,不是一个错误,它很好地解释了发生了什么,对吧?如果你对数据有影响感到惊讶,也许可以在这里尝试'查看(mat [sapply(mat,is.factor)])'或者'str'而不是'View'。 – Frank
@Frank那么这个问题包含'str(mat)'的输出,并没有任何因素。但是,警告消息根本不符合该输出。 –