【问题标题】:Create function (or loop) to read, rename, and save multiple data sets in R [duplicate]创建函数(或循环)以在 R 中读取、重命名和保存多个数据集 [重复]
【发布时间】:2018-05-16 01:44:01
【问题描述】:

我有 50 个 Stata 格式的数据集,我想将它们读入 R 并保存为 RData 集。目前,我的代码如下所示:

# Package to read Stata data sets into R
library(haven)

# Data set 1: Read Stata data into R
dataset1 <- read_dta("C:/dataset1.dta")

# Save as RData
save(dataset1, file = "C:/RData/dataset1.Rdata")

# Data set 2: Read Stata data into R
dataset2 <- read_dta("C:/dataset2.dta")

# Save as RData
save(dataset2, file = "C:/RData/dataset2.Rdata")

这很笨重并且占用了很多行代码。我想创建一个函数或循环,以有效地完成此操作,并且更易于理解和调试。

这段代码让我几乎到了那里(感谢@canyon),除了当我加载数据文件时,它们都有名为“import_data”的名称。文件本身命名正确(即 dataset1.Rdata、dataset2.Rdata),但加载到 R 时,环境名称为“import_data”。这是有问题的,因为我不能在同一环境中打开超过 1 个文件,因为它将覆盖现有文件(例如,dataset2.Rdata 将覆盖 dataset1.Rdata)。有没有办法使用与save 中的file = 选项匹配的名称保存文件?

library(haven)
library(stringr)

your_function <- function(x) {
import_path <- str_c("C:/dataset", (x), ".dta")
import_data <- read_dta(import_path)
save_path <- str_c("C:/RData/dataset", (x), ".Rdata")
save(import_data, file = save_path)
}

lapply(1:50, your_function)

我查看了看似解决此问题的链接帖子,但没有一个解决此特定问题。

【问题讨论】:

  • 试试看hereherehere
  • 这些帖子让我快到了,但没有解决如何处理将数据对象命名为与文件名相同的问题。与“遍历 R 目录中的所有文件,...”建议的答案相同。似乎有很多关于如何动态命名文件的帖子,但没有关于如何动态命名数据对象的帖子。

标签: r


【解决方案1】:

试试这个例子(已编辑):

read_function <- function(x) {
  import_path <- str_c("dataset", (x), ".rds")
  readRDS(file = import_path)

}

df_list <- lapply(1:2, read_function)

assign_function <- function(x) {
  dataset_name <- str_c("dataset", (x))
  assign(dataset_name, df_list[[(x)]], inherits = TRUE)
}

lapply(1:2, assign_function)

这个想法是读入数据集,将它们存储在一个列表中,然后为列表中的每个元素分配名称并返回到环境。

【讨论】:

  • 一个后续问题@canyon。这几乎完美无缺。一个问题是所有数据集都被标记为“import_data”。这是因为save(import_data, file = save_path) 告诉函数将它们命名为相同的名称。文件名是正确的,它们都具有相同的数据集标签。有没有办法保存文件,使数据集标签与文件名相同?谢谢!
  • 问题是因为它们都被标记为相同的,所以它们不能都在同一个环境中打开。如果我打开“dataset1”,那么“dataset2”、“dataset2”将覆盖“dataset1”,即使单独打开每个数据集都是正确的。
  • 对不起,我认为您需要等待其他人来回答这个问题(由于各种原因,这个特定问题通常不会出现在我身上,所以不知道如何回答)。跨度>
猜你喜欢
  • 2021-08-24
  • 2015-03-31
  • 2021-03-16
  • 2018-12-21
  • 1970-01-01
  • 2019-07-07
  • 2019-01-02
  • 2016-12-15
  • 2017-12-15
相关资源
最近更新 更多