使用循环或lapply来读取和命名文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用循环或lapply来读取和命名文件相关的知识,希望对你有一定的参考价值。

我是R的初学者,所以我的问题可能非常基础。我尽我所能搜索了这个问题的答案,但我找不到我需要的东西。

我有几个文件包含从每个州收集的数据。我目前的文件标题为“ALTable.csv”,“DETable.csv”等。

我想将这些文件读入程序并将内容保存在命名数据框中。然后,我想继续对这些数据帧执行操作,并使用它们构建由旧数据帧计算填充的新数据帧。

我目前有很多代码行,例如

AL <- read.csv("ALTable.csv")
DE <- read.csv("DETable.csv")

我试图避免为每个州单独执行此命令。我能够找出如何告诉R制作相关文件的列表以及如何加载它们,但我不知道如何告诉R制作这些文件的列表,读取它们并将它们保存为命名数据框。

类似地,在我拥有这些数据帧之后,我正在使用这些帧执行计算并创建填充了这些计算的新数据帧。我有像这样的台词

MuAL <- AL$prop/AL$pop
MuDE <- DE$prop/DE$pop

我想执行这些计算并使用给定的名称保存结果,而不必为每个单独的状态执行此操作。

理想情况下,我可以简单地列出所有缩写的单个列表,并在每个代码行中出现单个状态,插入状态缩写所在的占位符,并创建一个遍历列表的for循环并插入占位符的缩写。但是,我不知道如何做到这一点,除了最天真的方式,这是行不通的。

答案

如果你有一个abrevations列表并且所有csv文件确实以相同的方式命名,你可以使用lapply生成一个dataframe列表。

就像是:

abbr<- c("AL","DE")
name(abbr)<-abbr
listofDF <- lapply(abbr,function(ab)read.csv(paste0(ab,"Table.csv"))

然后你应该能够做muAL <- listofDF$AL$prop/listofDF$AL$pop,或者即使你想为所有缩写做到这一点:

mu <- lapply(litofDF,function(i)i$prop/i$pop)

在这里mu$AL将存储相当于你的MuAL

也许你可以提供一些有助于找到一个好解决方案的数据样本。

另一答案

首先将所有要加载的.csv文件放在某个文件夹中(在本例中为我们命名文件夹data)。然后,您的工作目录必须设置为此文件夹的父目录。然后,您可以从此目录加载所有文件,如下所示:

for (file in dir('data/')) {
  assign(substr(file, 1, 2), read.csv(paste0('data/', file)))
}

以上是关于使用循环或lapply来读取和命名文件的主要内容,如果未能解决你的问题,请参考以下文章

使用lapply或for循环将多个csv文件拉入自己的R数据帧

Lapply 随着循环次数的增加而减慢

常用python日期日志获取内容循环的代码片段

R:试图理解逻辑以用lapply()替换循环

如何使 tabItem 仪表板中的 for 循环或 lapply 循环中的函数闪亮

R语言的基本操作--读取和写入txt,sapply&lapply