【问题标题】:Using loops or lapply to read and name files使用循环或 lapply 读取和命名文件
【发布时间】:2019-06-21 00:19:54
【问题描述】:

我是 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 循环,该循环遍历我的列表并插入缩写占位符。但是,除了最幼稚的方法之外,我不知道如何做到这一点,这不起作用。

【问题讨论】:

标签: r for-loop import lapply


【解决方案1】:

如果您有一个缩写列表,并且所有 csv 文件确实以相同的方式命名,您可以使用 lapply 生成一个数据框列表。

类似:

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

然后你应该能够做到muAL &lt;- listofDF$AL$prop/listofDF$AL$pop,或者即使你想对所有缩写都这样做:

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

这里mu$AL 将存储您的MuAL 的等价物。

如果您可以提供一些数据样本,可能有助于找到一个好的解决方案。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-14
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多