首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缺少编码为NA和"NA“的数据

缺少编码为NA和"NA“的数据
EN

Stack Overflow用户
提问于 2019-11-09 08:04:25
回答 2查看 56关注 0票数 1

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

我知道is.na函数,并修改了web上看到的一个函数,将丢失的数据替换为9。我预计会有更多的数据,甚至可能有更多可能有丢失数据的因子变量。该函数对数字数据工作得很好,但是当我使用因子数据作为输入时,我没有得到错误,但丢失的数据项也没有变化,也就是说,它没有被重新编码为9。

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-09 18:20:24

您需要先将因子转换为字符,然后进行替换,如果需要,再将其转换回因子。

代码语言:javascript
复制
#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
票数 0
EN

Stack Overflow用户

发布于 2019-11-09 08:29:48

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

代码语言:javascript
复制
## 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)) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58775169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档