编辑: 我从一个由大约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循环与它有关,但这是一个疯狂的猜测。
答案 0 :(得分:0)
如果你想要反叛,它们应该是类似的。此外,在向data.frame添加行时,必须匹配列名。因此,要使此示例正常工作,您需要使用正确的名称
初始化set
set<-data.frame(hospital=character(), state=character())
然后而不是
newr<-c(Hrank[1], ST[i])bind in data frame "set"
set<-rbind(set, newr) #bind in set by row.
你可以做到
set<-rbind(set, data.frame(hospital=Hrank[[1]], state=ST[i]))