我有一个数据集,其中数据检查显示以下一些内容,所有这些都应该丢失
'missing'
'unknown'
'uncoded'
我是否正确地认为我可以用“NA”替换所有出现的这些?这是首选的方法吗?
var[var=='missing'] <- NA
var[var=='unknown'] <- NA
var[var=='uncoded'] <- NA
我有一个数据集,其中数据检查显示以下一些内容,所有这些都应该丢失
'missing'
'unknown'
'uncoded'
我是否正确地认为我可以用“NA”替换所有出现的这些?这是首选的方法吗?
var[var=='missing'] <- NA
var[var=='unknown'] <- NA
var[var=='uncoded'] <- NA
您展示的内容是可行的,但您可以将代码简化为通过%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")
to的所有值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
用 NA 替换它们的一般想法是正确的。
recode
如果您想在一行中执行此操作,则可以使用:
library(car)
var <- recode( var, "c('missing','unknown','uncoded')=NA" )