如何在R中用零替换<NA>值?

Vas*_*sco 1 import r

我有一个data.frame,有些列有NA值.我想<NA>用零替换s.我是怎么做到的

实际上,这里显示的mydate不是我的原始数据.原件太大了,不能在这里展示.

mydata = read.spss('mydata.sav', use.value.labels = TRUE, to.data.frame = TRUE, max.value.labels = Inf, trim.factor.names = FALSE, trim_values = FALSE, reencode = "UTF-8")


> mydata
   Q_16_O3 Q_16_O4 Q_16_O5 Q_16_O6 Q_16_O7 Q_16_O8 Q_16_O9
10    <NA>    <NA>    <NA>    <NA>    <NA>    <NA>    <NA>
11    <NA>    <NA>    <NA>    <NA>    <NA>    <NA>    <NA>
12    <NA>    <NA>    <NA>    <NA>    <NA>    <NA>    <NA>
13    <NA>    <NA>    <NA>    <NA>    <NA>    <NA>    <NA>
14    <NA>    <NA>    <NA>    <NA>    <NA>    <NA>    <NA>
15    Trem    <NA>    <NA>    <NA>    <NA>    <NA>    <NA>
16    <NA>    <NA>    <NA>    <NA>    <NA>    <NA>    <NA>
17    <NA>    <NA>    <NA>    <NA>    <NA>    <NA>    <NA>
18    <NA>    <NA>    <NA>    <NA>    <NA>    <NA>    <NA>
19    <NA>    <NA>    <NA>    <NA>    <NA>    <NA>    <NA>
20    <NA>    <NA>    <NA>    <NA>    <NA>    <NA>    <NA>


    str(mydata)

    'data.frame':   11 obs. of  7 variables:

    $ Q_16_O3: Factor w/ 10 levels "Ônibus","Vans",..: NA NA NA NA NA 4
 NA NA NA NA ...

    $ Q_16_O4: Factor w/ 10 levels "Ônibus","Vans",..: NA NA NA NA NA
 NA NA NA NA NA ...

    $ Q_16_O5: Factor w/ 10 levels "Ônibus","Vans",..: NA NA NA NA NA
 NA NA NA NA NA ...

    $ Q_16_O6: Factor w/ 10 levels "Ônibus","Vans",..: NA NA NA NA NA
 NA NA NA NA NA ...

    $ Q_16_O7: Factor w/ 10 levels "Ônibus","Vans",..: NA NA NA NA NA
 NA NA NA NA NA ...

    $ Q_16_O8: Factor w/ 10 levels "Ônibus","Vans",..: NA NA NA NA NA
 NA NA NA NA NA ...

    $ Q_16_O9: Factor w/ 10 levels "Ônibus","Vans",..: NA NA NA NA NA
 NA NA NA NA NA ...
Run Code Online (Sandbox Code Playgroud)

我想使用freq函数,所以我不能改变它的结构(mydata).

ps:我的问题是<NA>,不是 NA 在这种NA情况下,我在这里有一个解决方案.

Ale*_*own 8

对于几乎任何X包含数字的数据结构,请使用

X[is.na(X)] <- 0
Run Code Online (Sandbox Code Playgroud)

你的问题似乎有点混乱 - 你已经表明你的意思<NA>不是NA,没有解释什么类型 <NA>.

如果是"<NA>"你的意思,那么

X[X=="<NA>"] <- "0"
Run Code Online (Sandbox Code Playgroud)

如果数据框中包含混合数据类型,请检查以下内容:

X[is.character(X) & X=="<NA>"] <- "0"
Run Code Online (Sandbox Code Playgroud)

这在数字情况下严格更有用.

X[is.numeric(X) & is.na(X)] <- 0
Run Code Online (Sandbox Code Playgroud)

这是处理R中丢失的数据很常见的成语,但你也应该看看参数,na.rm = TRUE其中许多功能,如mean,sum,&C.会接受.

此策略将失败,因为您无法通过分配因子的值来添加新的因子级别.我没有使用过read.spss,但是看一下文档,我建议你在use.value.labels = FALSE你的调用中添加参数,以避免首先创建因素.

在您的特定情况下,您的整个数据框具有相同的类型(因子).这意味着转换为字符矩阵是安全的

> class(mydata[[1]])
"factor"
> mydataM <- as.matrix(mydata) 
> mode(mydataM)
"character"
Run Code Online (Sandbox Code Playgroud)

现在您可以替换NA值

X[is.character(X) & X=="<NA>"] <- "0"
Run Code Online (Sandbox Code Playgroud)

在更一般的情况下,您将不需要的因子列与其他类型混合在一起,您需要做一些更复杂的事情.

myDataM=as.data.frame(lapply(x,
  function(x)if(class(x)=="factor")as.character(x)else x))
Run Code Online (Sandbox Code Playgroud)