2016-10-05 15 views
0

numで指定されたランキングを持つ各状態の病院を含む 2列のデータフレームを返す関数を記述したいと思います。ラプルforループの代わりに

Rankallには、結果の名前(結果)と病院のランク (num)の2つの引数が必要です。この関数は、outcome-of-care-measures.csvファイルを読み込み、numで指定されたランキングを持つ各状態の病院を含む2列のデータフレーム を返します。

rankall <- function(outcome, num = "best") { 
## Read outcome data 
## Check that state and outcome are valid 
## For each state, find the hospital of the given rank 
## Return a data frame with the hospital names and the 
## (abbreviated) state name 
} 

head(rankall("heart attack", 20), 10) 
hospital state 
AK <NA> AK 
AL D W MCMILLAN MEMORIAL HOSPITAL AL 
AR ARKANSAS METHODIST MEDICAL CENTER AR 
4 
AZ JOHN C LINCOLN DEER VALLEY HOSPITAL AZ 
CA SHERMAN OAKS HOSPITAL CA 
CO SKY RIDGE MEDICAL CENTER CO 
CT MIDSTATE MEDICAL CENTER CT 
DC <NA> DC 
DE <NA> DE 
FL SOUTH FLORIDA BAPTIST HOSPITAL FL 

My機能が正しく動作しますが、最後のステップ(2列のデータフレームをフォーマットする)私は、次のループによって作られた:

new_data <- vector() 
    for(i in sort(unique(d$State))){ 
     new_data <- rbind(new_data,cbind(d$Hospital.Name[which(d$State == i)][num],i)) 
    } 
new_data <- as.data.frame(new_data) 

ことが可能であること、それは正しいですが、私は知っていますlapply機能によって同じループをコーディングする

私の試みは間違っている:

lapply(d,function(x) x <-rbind(x,d$Hospital.Name[which(d$State == i)][num])) 

どうすれば修正できますか?

+0

'num'は何ですか?小さな再現可能な例を表示してください – akrun

+0

@akrunが追加されました。もう一度それを確認してください。 –

+0

私はこのcoursera excersiceの目的は 'split'と' lapply'関数を使うことだと思います。 – Wietze314

答えて

1

私はあなたのdデータがすでにソートされて想定しています:

new_data <- do.call(rbind, 
        lapply(unique(d$State), 
          function(state){ 
           data.frame(State = state, 
             Hospital.Name = d$Hospital.Name[which(d$State==state)][num], 
             stringsAsFactors = FALSE) 
         })) 
関連する問題