【问题标题】:Coding Missing Data in R在 R 中编码缺失数据
【发布时间】:2012-07-04 08:56:50
【问题描述】:

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

'missing'
'unknown'
'uncoded'

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

var[var=='missing'] <- NA
var[var=='unknown'] <- NA
var[var=='uncoded'] <- NA

【问题讨论】:

  • “首选”方式很可能取决于您尝试进行的分析,因此您可能会得到很多意见答案。也许将问题改写为“R如何表示丢失的数据”可能会有所帮助。然而,这个问题的答案可能已经存在了。
  • 谢谢,但我认为丢失的数据总是表示为 NA ?我一直只处理已经编码为 NA 的数据,但这次我有这些其他编码。
  • 啊,我不知道您指的是首选的重新编码方式还是处理缺失值的首选方式。如果您确定要将它们编码为NA,那么您还可以考虑NA_character_、NA_integer_ 等(列在?"NA" 下)
  • 本巴恩斯,对不起。为了澄清,我指的是编码缺失数据的方式。实际上我将使用mice 包来估算这些缺失值。我正在自学 R,还没有太多经验。

标签: r


【解决方案1】:

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

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

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

> 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

要将所有编码为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

给了

> 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

注意原始关卡是如何保留的。如果您想删除这些级别,那么我们可以将droplevels() 函数应用于var2:

var2 <- droplevels(var2)

给了

> 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

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

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

【讨论】:

  • 谢谢。这真是一个很棒的答案! ! +1
【解决方案2】:

将它们替换为 NA 的总体思路是正确的。

如果你想在一行中完成,你可以使用recode:

library(car)
var <- recode( var, "c('missing','unknown','uncoded')=NA" )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    相关资源
    最近更新 更多