在R中编码丢失的数据

Joe*_*ing 2 r

我有一个数据集,其中数据检查显示以下一些,所有这些都应该丢失

'missing'
'unknown'
'uncoded'
Run Code Online (Sandbox Code Playgroud)

我是否正确地认为我可以用"NA"替换所有出现的这些?这是首选方式吗?

var[var=='missing'] <- NA
var[var=='unknown'] <- NA
var[var=='uncoded'] <- NA
Run Code Online (Sandbox Code Playgroud)

Rei*_*son 6

您展示的内容是可行的,但您可以通过%in%二元运算符将代码简化为单个调用进行比较.以下是使用一些虚拟数据的示例:

set.seed(1)
var <- factor(sample(c("missing","unknown","uncoded", 1:4), 100, replace = TRUE))
Run Code Online (Sandbox Code Playgroud)

这给了我们这样的因子向量:

> head(var)
[1] unknown uncoded 2       4       unknown 4      
Levels: 1 2 3 4 missing uncoded unknown
> table(var)
var
      1       2       3       4 missing uncoded unknown 
     14      15      17      13      10      18      13
Run Code Online (Sandbox Code Playgroud)

要将所有编码为以下任何值的值设置c("missing","unknown","uncoded")NA,我们一次性完成:

var2 <- var ## copy for demo purposes, but you can over write if you wish
var2[var2 %in% c("missing","unknown","uncoded")] <- NA
Run Code Online (Sandbox Code Playgroud)

这使

> var2[var2 %in% c("missing","unknown","uncoded")] <- NA
> head(var2)
[1] <NA> <NA> 2    4    <NA> 4   
Levels: 1 2 3 4 missing uncoded unknown
> table(var2)
var2
      1       2       3       4 missing uncoded unknown 
     14      15      17      13       0       0       0
Run Code Online (Sandbox Code Playgroud)

注意如何保留原始级别.如果要删除这些级别,我们可以将该droplevels()函数应用于var2:

var2 <- droplevels(var2)
Run Code Online (Sandbox Code Playgroud)

这使

> head(var2)
[1] <NA> <NA> 2    4    <NA> 4   
Levels: 1 2 3 4
> table(var2)
var2
 1  2  3  4 
14 15 17 13
Run Code Online (Sandbox Code Playgroud)

另请注意,默认情况下,NA表格输出中未显示,但我们会对其进行纠正,以表明它们仍然存在:

> table(var2, useNA = "ifany")
var2
   1    2    3    4 <NA> 
  14   15   17   13   41
Run Code Online (Sandbox Code Playgroud)