R警告消息 - 无效因子级别,NA生成

时间:2015-04-10 19:50:51

标签: r

我有以下代码块。我是R的完整初学者(几天前),所以我不确定需要分享多少代码来解决我的问题。所以这就是我写的所有内容。

mdata <- read.csv("outcome-of-care-measures.csv",colClasses = "character")
allstate <- unique(mdata$State)
allstate <- allstate[order(allstate)]
spldata <- split(mdata,mdata$State)
if (num=="best") num <- 1
ranklist <- data.frame("hospital" = character(),"state" = character())
for (i in seq_len(length(allstate))) {
    if (outcome=="heart attack"){
        pdata <- spldata[[i]]
        pdata[,11] <- as.numeric(pdata[,11])
        bestof <- pdata[!is.na(as.numeric(pdata[,11])),][]
        inorder <- order(bestof[,11],bestof[,2])
        if (num=="worst") num <- nrow(bestof)
        hospital <- bestof[inorder[num],2]
        state <- allstate[i]
        ranklist <- rbind(ranklist,c(hospital,state))
    }
}

allstate 是状态的字符向量。

结果的值可能类似于“心脏病发作”

num 将为数字或“最佳”或“最差”

我想创建一个数据框 ranklist ,其中包含医院名称和符合特定标准的州名称。

但是我一直收到错误

 invalid factor level, NA generated

我知道它与rbind有关,但我无法弄清楚它是什么。我已经尝试使用谷歌搜索,并尝试使用此网站上的其他类似查询进行故障排除。我检查过我试图绑定的任何载体都不是因素。我还尝试通过在分配期间设置医院和州as.character()强制强制,但是没有用。

如果有任何帮助,我将不胜感激。

提前致谢!

1 个答案:

答案 0 :(得分:1)

由于这显然来自Coursera任务,我不打算给你一个解决方案,但我会暗示:请查看read.csvdata.frame的帮助页面。两者都有参数stringsAsFactors。什么是默认值,真或假?要保留默认设置吗?第1行中colClasses = "character"是否必要?使用str函数检查mdataranklist中列的类别。 read.csv还有一个na.strings参数。如果您正确使用它,NAs introduced by coercion警告也将消失,并且不需要第16行。

最后,如果您事先知道最终大小,请不要在循环内增长矩阵或数据框。使用正确的尺寸(此处为52 x 2)对其进行初始化并指定例如第i个医院到数据框的第i行和第1列。那样rbind就没有必要了。

顺便说一句,你没有得到错误,而是警告。 R没有中断循环它只是让你知道某些值被强制转换为NA。您也可以使用seq_len来简化seq_along语句。