【问题标题】:R Storing Values from For Loop to Data FrameR将值从For循环存储到数据帧
【发布时间】:2018-04-08 15:50:22
【问题描述】:

我正在尝试编写一个具有 2 个参数的函数:列名和排名号。该函数将读取一个包含每个州医院的 CSV 文件。该函数应返回具有指定排名的医院名称的数据框。

我的解决方案是按州拆分主 CSV 文件,按所需列对每个数据帧排序,遍历每个州的数据帧,抓取行(其中行号 = 排名号),将每个州的医院名称存储到一个向量,然后使用循环中的向量创建一个数据框。

当我在控制台中测试我的功能的每个部分时,我能够收到我需要的结果。但是,当我完全运行该功能时,它并没有按需要存储医院名称。

这是我所拥有的:

rankall <- function(outcome, num = "best") {
    outcomedf <- read.csv("outcome-of-care-measures.csv")

    #using this as a test
    outcomedf <- outcomedf[order(outcomedf[, 11], outcomedf[, 2]), ]


    #create empty vectors for hospital name and state
    hospital <- c()
    state <- c()

    #split the read dataframe
    splitdf <- split(outcomedf, outcomedf$State)

    #for loop through each split df
    for (i in 1:length(splitdf)) {
        #store the ranked hospital name into hospital vector
        hospital[i] <- as.character(splitdf[[i]][num, 2])
        #store the ranked hospital state into state vector
        state[i] <- as.character(splitdf[[i]][, 7])
    }

    #create a df with hospital and state
    rankdf <- data.frame(hospital, state)
    return(rankdf)
}

当我完全运行该函数时,我在“医院”列中收到 NA,但是当我单独运行该函数的每个部分时,我能够收到所需的医院名称。我有点困惑为什么我能够在函数之外运行这个函数的每个单独部分并返回我想要的结果,但是当我作为一个整体运行函数时却没有。谢谢你。

【问题讨论】:

  • 你能用dput(head(outcomedf, 20))的输出编辑问题吗?

标签: r


【解决方案1】:

此问题与 Coursera 上约翰霍普金斯大学 R 编程课程中的编程作业 3 相关。因此,我们无法提供代码的“更正版本”,因为这样做会违反 Coursera Honor 代码。

使用默认设置运行时,rankall() 函数的实现将失败,因为在提取运算符中使用 num 时,没有 ["best",2] 行。如果您以head(rankall("heart attack",1)) 运行代码,则会产生以下输出。

> head(rankall("heart attack",1))
                              hospital state
1     PROVIDENCE ALASKA MEDICAL CENTER    AK
2             CRESTWOOD MEDICAL CENTER    AL
3              ARKANSAS HEART HOSPITAL    AR
4                 MAYO CLINIC HOSPITAL    AZ
5    GLENDALE ADVENTIST MEDICAL CENTER    CA
6 ST MARYS HOSPITAL AND MEDICAL CENTER    CO

要完全纠正您的功能,您需要进行以下更改。

  1. 添加代码以按所需的outcome 列对数据进行排序:心脏病发作、心力衰竭或肺炎
  2. 添加代码以处理当州没有足够的医院来返回有效结果时的情况(即波多黎各排名第 43 的肺炎医院
  3. 添加代码以处理“最佳”和“最差”作为num 参数的输入

【讨论】:

  • 是的,我理解这部分作业;我排除了这些部分,因为我认为我可以很好地处理函数的最佳/最差部分。我遇到的问题是,当我单独运行函数的每个单独部分时(在全局环境中),我能够在数据框中获得正确的结果。但是,当我尝试完全运行该函数时,返回的数据帧包含 NA 值(即:与我能够在全局环境中生成的数据帧不同)。
  • 问题似乎出在 for 循环中,即“医院”没有正确地将所有医院存储在向量中,或者没有将“医院”向量正确存储到数据框中。
  • @xpandamonium - 我能够获得为多个 num 值生成有效输出的函数,因此问题一定出在您在函数中读取原始数据的方式上。
猜你喜欢
  • 2016-01-31
  • 2022-06-29
  • 2014-08-05
  • 1970-01-01
  • 1970-01-01
  • 2017-10-21
  • 2016-08-21
  • 1970-01-01
  • 2015-04-05
相关资源
最近更新 更多