我有一个棒球击球手的数据库,并开发了以下随机森林模型,以预测他们进入棒球名人堂的潜在成功(仅仅基于他们的击球成功,但也添加了诸如他们是否涉及类固醇的事情)。
rf <- randomForest(HOF ~ runs + rbi + bb + hits + so + doubles + BA +
hr + stolen_base + triples + Playing_Era + Banned + Steroids, data = batters,
na.action=na.exclude, importance = TRUE)
我想开发代码,提取符合模型条件的玩家名称。
我的代码,用于预测和输出如下:
p=predict(rf, na.action="na.exclude")
length(p)
length(batters$HOF)
t=table(p, batters$HOF)
t
x=sum(table(predict(rf, na.action="na.exclude"), batters$HOF))
lname=vector()
for (i in 1:10084){
if (batters$HOF[i]=="No" & as.character(p[i])=="Yes")
lname[i]=batters$lastname[i] & fname[i]=batters$firstname[i]
else {
break
}
}
z=data.frame(batters$lastname, batters$firstname, batters$HOF,p)
View(z[z[,4]=="Yes" & z[,3]=="No",])
z[z]
table(z)
lname
我想要列出姓氏,理想情况下,要列出击球手的名字(如果有两个姓氏相同的人)。代码中的以下行让我进入数据框提取,在那里我可以看到结果并在报告中手动输入名称。
View(z[z[,4]=="Yes" & z[,3]=="No",])
但是,我希望在不重新输入R的情况下将结果显示在R中。相反,当我到达代码z [z]时,我收到以下错误消息:
Error in [.default(z, z) : invalid subscript type 'list'
然后,没有它,表格和姓氏列表也不会显示。
您可以提供任何帮助,帮助我列出R输出中的姓氏,而无需从我从View中获取的表格中重新输入它们(z [z [,4] ==“是”&amp; z [, 3] ==“不”,])非常感谢。
答案 0 :(得分:0)
它并不优雅,但只能通过分配几个新对象来解决。
z1 <- (z[z[,4]=="Yes" & z[,3]=="No",])
z_complete <- z1[complete.cases(z1), ]
z_final <- with(z_complete, z_complete[order(batters.lastname, batters.firstname, batters.HOF, p),])
z_final
如果有人在没有创建两个新对象的情况下看起来更好一些,我会很感激指针。
再次感谢,Heikki!