我在数据框中有一个包含因子变量"gender“的数据集。对缺少的性别数据进行编码。当我运行fix(mydata)时,我发现这个单元格实际上是空的。
我知道is.na函数,并修改了web上看到的一个函数,将丢失的数据替换为9。我预计会有更多的数据,甚至可能有更多可能有丢失数据的因子变量。该函数对数字数据工作得很好,但是当我使用因子数据作为输入时,我没有得到错误,但丢失的数据项也没有变化,也就是说,它没有被重新编码为9。
Modified Function:
na.nine <- function (x) {
x[is.na(x)] <- 9
return(x)
}
mydata1$gender=na.nine(mydata1$gender)结果是没有重新编码,并显示了一条警告消息: In [<-.factor(*tmp*,is.na(x),value = 9):invalid factor level,NA生成的输出显示根本没有更改。
我需要保护这些数据。它属于其他人,否则我会包含更多。
如果我正在进行统计研究,我会删除一行包含缺少数据的因子变量的行,但如果要求我将< NA >替换为9怎么办?如果不使用fix(mydata1)并一次更改一个,我就不知道该怎么做了?如果我有5000个观察值要检查怎么办?
这里的任何帮助都将不胜感激。谢谢。MM
发布于 2019-11-09 18:20:24
您需要先将因子转换为字符,然后进行替换,如果需要,再将其转换回因子。
#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发布于 2019-11-09 08:29:48
这里没有任何示例数据,但这应该可以解决我认为的问题所在。
## 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)) https://stackoverflow.com/questions/58775169
复制相似问题