我有以下代码块。我是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()强制强制,但是没有用。
如果有任何帮助,我将不胜感激。
提前致谢!
答案 0 :(得分:1)
由于这显然来自Coursera任务,我不打算给你一个解决方案,但我会暗示:请查看read.csv
和data.frame
的帮助页面。两者都有参数stringsAsFactors
。什么是默认值,真或假?要保留默认设置吗?第1行中colClasses = "character"
是否必要?使用str
函数检查mdata
和ranklist
中列的类别。 read.csv
还有一个na.strings
参数。如果您正确使用它,NAs introduced by coercion
警告也将消失,并且不需要第16行。
最后,如果您事先知道最终大小,请不要在循环内增长矩阵或数据框。使用正确的尺寸(此处为52 x 2)对其进行初始化并指定例如第i个医院到数据框的第i行和第1列。那样rbind
就没有必要了。
顺便说一句,你没有得到错误,而是警告。 R没有中断循环它只是让你知道某些值被强制转换为NA
。您也可以使用seq_len
来简化seq_along
语句。