创建函数(或循环)以在R中读取,重命名和保存多个数据集

时间:2017-12-01 22:01:09

标签: r

我有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)。有没有办法保存文件的名称与file =中的save选项相匹配?

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)

我查看了似乎解决此问题的链接帖子,但没有一个解决了这个具体问题。

1 个答案:

答案 0 :(得分:0)

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

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)

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