gpt4 book ai didi

r - 快速替换 NA - 错误或警告

转载 作者:行者123 更新时间:2023-12-04 11:35:17 28 4
gpt4 key购买 nike

我有一个名为“mat”的大 data.frame,有 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
.
.
.

我需要非常快速的工具来替换它们。结果应如下所示:
    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),所以我还必须将其转换回来。有没有更好的方法来做到这一点?

我的 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 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看起来像我想要的,但是值太多了,所以我无法检查它们是否正确。
  • 最佳答案

    请尝试以下操作:

    mat %>% replace(is.na(.), 0)

    关于r - 快速替换 NA - 错误或警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45574212/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com