2015-06-25 95 views
0

我需要從CSV中選擇大型數據集中的一列。基於函數字符參數在R中設置數據框

我有這個功能。兩個字符參數 - 國家名稱和名稱。基於疾病名稱,我需要選擇大數據集中的右列來執行計算。

best <- function(state, outcome) { 

    OutcomeData <- read.csv("outcome-of-care-measures.csv", colClasses = "character") 

其次,我試圖給變量OutcomeCol值,基於函數的參數結果。數字是OutcomeData數據集中對應outcome參數的列號。

I 
    ## 2 - Hospital.Name 
    ## 7 - State 
    ## 11 - 30 Day mortality Heart Attack 
    ## 17 - 30 Day mortality Heart Failure 
    ## 23 - 30 Day mortality Pneumonia 

    ## Choose Outcome for filtering data 
    if (outcome == "heart attack") {OutcomeCol <- 11} 
    if (outcome == "heart failure") {OutcomeCol <- 17} 
    if (outcome == "pneumonia") {OutcomeCol<- 23} 
    try(if (!exists("OutcomeCol")) {stop("invalid outcome")}, silent = TRUE) 

但是,當我嘗試運行功能最好(「TX」,「心力衰竭」)沒有任何反應。如果我在if語句後嘗試放置print(OutcomeCol) - 它將返回NA。

錯誤在哪裏?也許有另一種簡單的方法來執行此操作?

+0

您的功能沒有'return'值或關閉! '}'...或者你只是沒有完全粘貼它? – Frank

+0

謝謝,@Frank!是的,這是功能的一部分,似乎沒有工作,我找到了另一種正確的方法。 'deathColumn < - c(11,17,23) lookup < - data.frame(outcome,mortalityColumn) OutcomeCol < - lookup $ mortalityColumn [lookup $ results%in%outcome]' –

+0

很酷,很高興聽到您的聲音弄明白了,是的,製作一張查找表是一個很好的選擇一系列「if」) – Frank

回答

0

所以我找到了另一種方式 - 做一個查找表是去(而不是IFS序列的好方法

mortalityColumn <- c(11, 17, 23) lookup <- data.frame(outcomes, 
    mortalityColumn) OutcomeCol <- lookup$mortalityColumn[lookup$outcomes %in% outcome]