编辑:我从一个由大约 4000 行和 3 列组成的稍微大的数据框开始。第一列给出一个数字,第二列给出一个字母(我称之为医院名称),第三列是一个州(2 个字母的缩写)。我必须生成一个显示医院名称(第 2 行)及其状态的数据框,如下所示(仅显示 2 行):
hospital state
1 A AK
2 B MD
我需要实现的是提取医院排名(越低越好)并为所有州在该州给定位置的医院生成数据框的功能。我写了一个模拟
sim<-data.frame(c(rnorm(4000, 2, 3)), sample(letters, size=4000, replace=T), sample(ST, size=4000, replace=T ))
simrank<- function(letter="a", num=1) {
Srank<-data.frame()
set<-data.frame()
for (i in 1:length(ST)){
Srank<-sim[sim[,3]==ST[i], c(1, 2)]
Srank<-Srank[order(Srank[,1], Srank[,2], decreasing=F),]
Srank<-cbind(Srank, c(1:length(Srank[,1])))
Srank<-Srank[Srank[,3]==num, 2]
newr<-c(Srank[2], ST[i])
set<-rbind(set, newr)
}
colnames(set)<-(c("hospital", "state"))
set
}
我不断得到:
hospital state
1 <NA> AK
2 <NA> <NA>
3 <NA> <NA>
ST 向量为:
ST<-c("AK", "AL", "AR", "AZ", "CA", "CO", "CT", "DC", "DE", "FL", "GA", "GU", "HI", "IA", "ID", "IL", "IN", "KS", "KY", "LA", "MA", "MD", "ME", "MI", "MN", "MO", "MS", "MT", "NC" ,"ND", "NE", "NH", "NJ", "NM", "NV", "NY", "OH", "OK", "OR", "PA", "PR", "RI", "SC", "SD" ,"TN", "TX", "UT", "VA", "VI", "VT", "WA", "WI", "WV", "WY)
第一篇文章
我的代码是:
Hrank<-data.frame()
set<-data.frame()
for (i in 1:length(ST)){
Hrank<-dat[dat[,7]==ST[i], c(2, outcome)] #subset a larger data frame
Hrank<-Hrank[order(Hrank[,2], Hrank$Hospital.Name, decreasing=F),] #sort data frame
Hrank<-cbind(Hrank, c(1:length(Hrank[,1]))) #add a row that gives a rank
Hrank<-Hrank[Hrank[,3]==num, 1] #Subsets the data frame again
str(Hrank) #just checking
newr<-c(Hrank[1], ST[i]) #create the vector to bind in data frame "set"
str(newr) #just checking
set<-rbind(set, newr) #bind in set by row.
}
colnames(set)<-(c("hospital", "state"))
set
所以,基本上我希望在我的 ST 变量(在本例中为 54x2 数据框)中为尽可能多的对象输出一个整洁的数据框。我得到什么:
head(output)
hospital state
1 MAT-SU REGIONAL MEDICAL CENTER AK
2 <NA> <NA>
3 <NA> <NA>
4 <NA> <NA>
5 <NA> <NA>
6 <NA> <NA>
同样, srt(newr) 按预期返回 2 个对象的字符向量。我不知道发生了什么,实际上对解决方案一无所知。我只能怀疑 for 循环与它有关,但这是一个疯狂的猜测。