基于函数字符参数在R中子集数据帧

时间:2015-06-25 14:53:32

标签: r function if-statement subset

我需要从CSV中选择大型数据集中的列。

我有这个功能。两个字符参数 - 是State和desease名称。根据疾病名称,我需要在大型数据集中选择正确的列来执行计算。

best <- function(state, outcome) {

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

其次,我尝试根据函数参数结果为变量OutcomeCol赋值。 Number是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。

错误在哪里?也许有其他简单的方法来执行此操作?

1 个答案:

答案 0 :(得分:0)

所以我找到了另一种方法 - 制作查找表是一个很好的方法(而不是一系列ifs!

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