【问题标题】:creating multiple R dataframe dynamically importing from the file directory contains sas datasets从文件目录动态导入创建多个 R 数据框包含 sas 数据集
【发布时间】:2023-03-06 03:50:01
【问题描述】:

需要你的帮助,我是 R 新手。 场景是在特定位置有一个 sas 数据集列表。

path <- 'C:\\XXXX\\XXX'
files <- list.files(path = path,pattern="*.sas7bdat", full.names=FALSE)

files 变量给出了该目录中可用文件名的列表。

我使用拆分函数将文件名保留为数据框,删除存储在 domain_name 变量中的扩展名。 迭代他的sas数据集导入的每个文件名并动态创建每个数据集名称。(例如,如果有30个sas数据集,则应创建30个R数据帧。

library(haven)
for (i in 1:length(files)){ 
  domain_name=strsplit(i,split='.sas7bdat', fixed=TRUE)
  domain_name <- read_sas(data_file=paste(path,i,sep='/'))
}

你能解释一下这个概念并解决这个问题吗?

提前致谢

【问题讨论】:

  • 您可以使用列表:domain_name[[i]] &lt;- read...
  • 谢谢,它给出了 NULL 值,我正在尝试根据目录中列出的文件生成单个数据帧?可能是什么原因
  • 请提供一个可重现的最小示例。我不明白,你的问题到底是什么:给NULL的是什么?
  • domain_name[[i]]

标签: r


【解决方案1】:

以下原则上应该有效。由于没有真实的例子,我只能猜测。

path <- 'C:/path2file/'
print(path)
files <- list.files(path = path, pattern="*.sas7bdat", full.names=FALSE)
print(files)

mydf <- list()
for (i in 1:length(files)){
  filename <- paste0(path, files[i])
  print(filename)
  # browser() # if you like to step through the file
  mydf[[i]] <- haven::read_sas(data_file=filename)
  print(names(mydf[[i]]))
  eval(parse(text = paste0("mydf_", i, " <- haven::read_sas(data_file=filename)")))
}

然后您可以通过例如访问每个 data.frame df1 &lt;- mydf[[1]]

【讨论】:

  • 感谢。它创建了一个大列表,但我正在寻找每个单独的 sas 数据集到 R 数据帧。下面的好吗? mydf[i]= pd.DataFrame(mydf)
  • @Rod 我添加了另一个解决方案,但这不是,R 是如何工作的......它应该创建很多数据帧。
  • 为迟到的反应道歉,这是我的要求。感谢您的代码。你能给我每个数据框的名称作为文件名吗,如果 sas 数据集名称是“aa.sas7bdat”,那么数据名应该是“aa”。我正在尝试使用 domain name=strsplit(i,split='.sas7bdat', fixed=TRUE) 这个语句但无法识别它。
  • 再次感谢代码,它没有解决。我收到这个错误,解析错误(text = paste0(filename,“:1:1: 意外的'/'我认为文件名正在打印完整路径,你能给我每个数据框的名称作为文件名吗,如果 sas 数据集名称是“aa.sas7bdat”,数据名应该是“啊”。
  • 我能够修复它。感谢您的帮助
猜你喜欢
  • 2012-06-13
  • 1970-01-01
  • 1970-01-01
  • 2020-12-16
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多