0

我是 R 新手,正在编写一个代码,该代码能够根据特定条件提供每个州特定级别的医院列表(Coursera 上约翰霍普金斯大学 R 编程课程的最后一项作业)。为了学习 R,我正在审核课程,并且一直停留在最后一部分。

本质上,我正在获取一个包含多列的数据集:医院名称、州和特定条件下的 30 天死亡人数。我正在创建一个带有参数的函数,outcome医疗状况num在哪里,是医院的指定等级。最终目标是一个包含医院列表的数据框,这些医院在各自的州内按特定医院进行排名。outcomenumnum

我正在做的是将 .csv 文件读入数据框中并去除无关紧要的列,然后重新标记列标题,以便它们更容易引用。

data <- read.csv("outcome-of-care-measures.csv")
data <- select(data, c(2, 7, 11, 17, 23))
colnames(data) <- c("hospital", "state", "heart attack", 
                    "heart failure", "pneumonia")
data[[outcome]] <- as.numeric(as.character(data[[outcome]]))

然后我正在做的是采用仅包含医院、州和死亡人数的新数据框并对其进行简化,以使新数据框仅包含指定的死亡人数列(意思是如果输入“心脏病发作”,这是唯一选择进行分析的列)。我的方法是获取列表并按州缩写的字母顺序对其进行排序,然后按升序排列死亡人数。

outcomedata <- select(data, hospital, state, matches(outcome))
outcomedata <- arrange(outcomedata, outcomedata$state, outcomedata[[outcome]])

然后,我将按州拆分大数据框,以便这个新数据框列表中的每个数据框仅包含该州的医院。

statesplit <- split(outcomedata, outcomedata$state)

我的想法是在每个数据帧中创建一个新列,其中包含每个州内每个医院的排名,使用该rank()函数并将死亡率列作为每个数据帧的参数传递。换句话说,有没有一种方法可以lapply()通过引用每个相应数据框的变量名称来在每个数据框中创建一个新列,并在其各自的数据框内列出医院的排名——我正在尝试做一些事情沿着:

hospital_rank <- rank(outcomedata[, 2])
outcomedata <- mutate(outcomedata, Rank = hospital_rank)
specific_rank <- num
  
rank_hospital <- filter(outcomedata, outcomedata$Rank == specific_rank)

但对每个数据框执行此操作并返回一个数据框,其中包含所有州中指定排名的所有医院。

将不胜感激任何和所有的帮助,谢谢!

编辑:预期结果

  • 接受参数outcomenum进入函数
  • 显示带有医院名称和状态的数据框,所有这些都在num他们自己的状态中的等级

例如,我设置了函数的一个方面,以便num = "best"在每个状态中找到 #1 排名:

outcomedata <- select(data, hospital, state, matches(outcome))
outcomedata <- arrange(outcomedata, outcomedata$state, outcomedata[[outcome]])
outcomedata <- distinct(outcomedata, outcomedata$state, .keep_all = TRUE)

   return(outcomedata)

这将返回此输出并继续所有状态。但是,我怎样才能找到作为参数传递给初始函数的任何排名,而不是找到排名第一的排名?

4

0 回答 0