2015-06-25 52 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]