2016-10-05 2 views
0

num에 지정된 순위가있는 각 상태에 병원이 포함 된 2 열 데이터 프레임 을 반환하는 함수를 작성하려고합니다.Lapply for 루프 대신에

두 가지 인수를 취하는 Rankall : 결과 이름 (결과)과 병원 순위가 (num) 인 걸립니다. 이 함수는 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 

내 함수는 정확한 작동하지만, 최종 단계 (2 열 데이터 프레임 포맷하기)는 I는 다음 루프에 의해 제조 :

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) 
         }))