0

编辑:我从一个由大约 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 循环与它有关,但这是一个疯狂的猜测。

4

1 回答 1

0

如果你想 rbind 东西,它们应该是相似的类型。此外,在向 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]))
于 2014-05-06T15:31:54.090 回答