【问题标题】:Running Different Data sets in a Loop in R在 R 中循环运行不同的数据集
【发布时间】:2017-11-09 03:46:57
【问题描述】:

我正在尝试通过循环运行多年的数据集,特别是 2009 年到 2014 年,并重命名变量以反映年份。例如,我从 2009 年开始加载 consolidated,并尝试将 $AGE09 重命名为 $AGE。澄清一下:我希望能够在 2010 年、2011 年等上做到这一点——我希望能够在所有年份循环运行consolidated.2009$AGE <- consolidated.2009$AGE09X,将 2009 年更改为 2010 年,将 09 更改为 10,等等。

我很难弄清楚如何让 R 加载一年的数据、重命名变量以及循环执行我想做的其他事情。

rx_files <- as.list(dir(pattern="* - rx.rda"))
consolidated_files <- as.list(dir(pattern="* - consolidated.rda"))
   for(i in c(2009:2014)){                                                             
     load(rx_files[[i]])
     load(consolidated_files[[i]])
     rx.[[i]] <- rx.[[i]]
     consolidated.[[i]] <- consolidated.[[i]]
     consolidated.2009$AGE <- consolidated.2009$AGE09X
     #I attempted to run the above code in the loop using the below code
     consolidated.[[i]]$AGE <- consolidated.[[i]]$AGE*X
   }

我不断遇到错误,R 没有将rx.[[i]]consolidated.[[i]] 识别为合法对象。这是一个很难解释的问题,希望这里有人可以提供帮助。

谢谢。

【问题讨论】:

    标签: r database loops variables for-loop


    【解决方案1】:

    关于您的问题,请先说几句: 当您使用 i == 2009 调用 rx_files[[i]] 时,您正在寻找该列表的第 2009 个元素,我怀疑该列表从第 1 年开始,因此您可能不会通过这样做获得 2009 年。

    当您执行 rx.[[i]] 时,您似乎正在尝试连接一个名称,例如 rx.2009。它不能这样工作, [[ 用于列表 rx.不是列表。

    请试试这个,让我知道它是否是你想要的,然后我可以编辑解释。

    library(data.table) # to use the function setnames, execute install.packages("data.table") if you don't have it
    rx_files <- as.list(dir(pattern="* - rx.rda"))
    consolidated_files <- as.list(dir(pattern="* - consolidated.rda"))
    #supposing all these files start with a clean year (4 numeric characters) and that there's only one file per year and filetype
    years_rx <- as.numeric(substr(rx_files,1,4)
    years_cf <- as.numeric(substr(consolidated_files,1,4)
    for(i in c(2009:2014)){                                                             
      load(rx_files[[which(years_rx == i)]]) # not used actually, why do you load it ?
      load(consolidated_files[[which(years_cf == i)]])
      eval(parse(text=sprintf("setnames(consolidated.%s,'AGE%sX','AGE')",i,substr(i,3,4))))
    }
    

    【讨论】:

    • 嗨,谢谢,这非常有帮助。代码现在正在运行并按希望重命名变量。为了回答您之前的观点,我编写了一些代码以使列表成为列表中的第 2009 至 2014 元素以简化事情,但认为它偏离了我的问题的重点。
    • 很好,告诉我是否需要我解释一些行,或者它是否足够好,然后考虑验证答案:)
    猜你喜欢
    • 2020-11-04
    • 2021-08-24
    • 1970-01-01
    • 2016-01-08
    • 2020-12-09
    • 2016-08-24
    • 2018-06-16
    • 2015-09-13
    • 2016-10-24
    相关资源
    最近更新 更多