我有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)
我看了链接的帖子,似乎解决了这个问题,但没有一个解决这个具体的问题。
发布于 2017-12-02 03:44:51
试一下这个例子(编辑后):
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)
其思想是读取数据集,将其存储在列表中,然后为列表中的每个元素分配名称,并返回环境。
https://stackoverflow.com/questions/47602085
复制