【问题标题】:Read in data from same subfolder in different subfolders to R将不同子文件夹中相同子文件夹中的数据读入R
【发布时间】:2020-06-11 15:19:50
【问题描述】:

我的数据文件中有多个文件夹,因此这些文件都有一个公共目录“~/Desktop/Data/”。数据文件夹中的每个文件都是不同的,因此

/Desktop
  /Data
    /File1/Data1/
    /File2/Data1/
    /File3/Data1/

File 文件夹不同,但它们都包含同名的数据文件夹。我想读入 R 的每个数据子文件夹中都有 .dta 文件

编辑:我还应该注意 File 文件夹中的内容是:

../Filex
    /Data1 -- What I want to read from
    /Data2
    /Data3
    /Code

/Filex/Data1 是感兴趣的主文件夹。所有File 文件夹都采用这种结构。

我已经查阅了多个堆栈溢出提要,到目前为止,我只知道如何在所有 File 文件夹相同的情况下将它们全部列出。但是,如果这些File 文件夹的命名略有不同,我不确定如何将数据读入 R。

到目前为止我已经尝试过了,但我得到了一个空集作为回报

files <- dir("~/Desktop/Data/*/Data/", recursive=TRUE, full.names=TRUE, pattern="\\.dta$")

对于实际数据,从 ICPSR 下载文件可能有助于重现问题。

编辑:我正在使用 MAC OSX 10.15.5

非常感谢您的帮助!

【问题讨论】:

  • Data结构/Filex/Data/中的所有文件夹还是还有其他文件夹?
  • 他们都有这样的结构,是的。那里没有别的东西。谢谢!在 /Filex 文件夹中,还有其他不感兴趣的东西——例如:代码文件、密码本等。

标签: r loops


【解决方案1】:

试试

files <- dir("~/Desktop/Data",pattern=".+.dta$", full.names = TRUE, recursive = TRUE)
# to make sure /Data is there, as suggestted by @Martin Gal:
files[grepl("Data/",files)]

这个Regex tester 和这个Regex cheatsheet 对解决问题非常有用。

在 Windows 下测试:

files <- dir('c:/temp',pattern=".+.dta$", full.names = TRUE, recursive = TRUE)
files[grepl("Data/",files)]   
[1] "c:/temp/File1/Data/test2.dta" "c:/temp/File2/Data/test.dta" 

【讨论】:

  • 这在这里工作得很好,但是它也会返回直接位于上层Data 文件夹中的.dta 文件。我想知道是否有可能在R的路径中使用通配符
  • 也许用files[grep("Data/File\\d+/Data1/", files)] 进一步子集是有用的。
  • 您介意演示一下这如何适合上述答案吗?我似乎无法让它发挥作用。上面的答案对我也不起作用,但我认为值得一试。
  • 编辑了一个更好的答案:得到数据,仍然与特殊字符战斗/
猜你喜欢
  • 2013-01-18
  • 2013-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-21
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
相关资源
最近更新 更多