簡體   English   中英

用rapply代替r中的for循環

[英]Lapply instead of for loop in r

我想編寫一個函數,該函數返回一個2列的數據幀,其中包含每個州的醫院,該州的排名以num指定。

Rankall有兩個參數:結局名稱(結果)和醫院排名(數字)。 該函數讀取result-of-care-measures.csv文件,並返回一個2列數據框,其中包含處於每個州的醫院,該醫院的排名以num指定。

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列數據幀)由以下循環完成:

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

我的嘗試是錯誤的:

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

我該如何解決?

我假設您的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)
                       }))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM