我有一个数据集,该数据集在数据框中包含因子变量“性别”。缺少性别的数据已编码。当我运行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生成
输出显示根本没有更改。
我需要保护这些数据。它属于其他人,否则我会包括更多。
如果我正在进行统计研究,我将删除包含缺少数据的因子变量的行,但是如果要求我将
这里的任何帮助将不胜感激。谢谢。 MM
答案 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