缺少编码为NA和“ NA”的数据

时间:2019-11-09 00:04:24

标签: r

我有一个数据集,该数据集在数据框中包含因子变量“性别”。缺少性别的数据已编码。当我运行fix(mydata)时,我发现该单元格实际上是空的。

我知道is.na函数,并且已经修改了在网络上看到的函数,以用9代替丢失的数据。我期望有更多的数据,也许还有更多可能具有缺失数据的因子变量。该函数对数字数据来说很好用,但是当我使用因子数据作为输入时,我没有收到任何错误,但是丢失的数据项也没有变化,就是它没有被重新编码为9。

Modified Function:
na.nine <- function (x) {
    x[is.na(x)] <- 9
    return(x)
}
mydata1$gender=na.nine(mydata1$gender)

结果是不重新编码,并显示一条警告消息: 在[<-.factor*tmp*中,is.na(x),value = 9):   无效的因子水平,NA生成 输出显示根本没有更改。

我需要保护这些数据。它属于其他人,否则我会包括更多。

如果我正在进行统计研究,我将删除包含缺少数据的因子变量的行,但是如果要求我将替换为9,该怎么办? 如果不使用fix(mydata1)并一次更改,我不知道该怎么做?如果我要检查5000个观测值怎么办?

这里的任何帮助将不胜感激。谢谢。 MM

2 个答案:

答案 0 :(得分:0)

您在此处没有任何示例数据,但这应该可以解决我认为的问题。


## This will also show NAs in the sample as well as "NA"s
table(paste(mydata1$gender))


## Lets just keep "m" & "f" values with all else becoming NA
mydata1$gender<-ifelse(mydata1$gender=="m" | mydata1$gender=="f", mydata1$gender, NA)


## This is the corrected output where only "m" & "f" remain
table(paste(mydata1$gender)) 


答案 1 :(得分:0)

您需要先将因数转换为字符,然后替换,并在需要时转换回因数。

#Modified Function:
na.nine <- function (x,TOREPLACE,FACTOR=TRUE) {
    x <- as.character(x)
    x[is.na(x)] <- TOREPLACE
    # if character is ok
    #return(x)
    return(factor(x))
}

mydata = data.frame(
gender=sample(c("M","F"),10,replace=TRUE),
age = sample(20:70,10,replace=TRUE)
)
# make some NAs
mydata$gender[1:3] <- NA
# use your function
mydata$gender <- na.nine(mydata$gender,9)
mydata