读取包含未知路径的.csv文件 - R.

时间:2013-02-26 22:27:35

标签: r path design-patterns dir

我知道这可能是一个非常愚蠢的问题,但我已经花了好几个小时了。

想要读取我没有完整路径的.csv文件(* / * data.csv)。我知道以下将获取当前目录的路径,但不知道如何适应

Marks <- read.csv(dir(path = '.', full.names=T, pattern='^data.*\\.csv'))

尝试了这个,但没有工作

Marks <- read.csv(file = "*/*/data.csv", sep = ",", header=FALSE))

我无法识别特定路径,因为这将在具有不同路径的不同机器上使用,但我确定主目录的子文件夹,因为它们是bash脚本的结果

我正计划在定义工作区的unix中调用它

我的数据结构是

lecture01/test/data.csv
lecture02/test/data.csv
lecture03/test/data.csv

2 个答案:

答案 0 :(得分:2)

您的评论 - 虽然目前不是您的问题本身 - 表明您希望在包含一些子目录(讲座01,讲座02等)的工作目录中运行您的代码,每个子目录都包含一个子目录'marks'反过来包含data.csv文件。如果是这样,并且您的目标是从每个子目录中读取csv,那么根据剩余的详细信息,您有几个选项。

案例1 :直接指定顶级目录名称,如果您完全了解它们并且它们可能是特殊的:

dirs <- c("lecture01", "lecture02", "some_other_dir")
paths <- file.path(dirs, "marks/data.csv")

案例2 :构建顶级目录名称,例如如果它们都以“讲座”开头,后跟一个两位数字,你就可以(或特别希望)指定一个数字范围,例如: 01虽然15:

dirs <- sprintf("lecture%02s", 1:15)
paths <- file.path(dirs, "marks/data.csv")

案例3 :通过匹配模式来确定顶级目录名称,例如:如果你想从每个目录中读取数据,以字符串“讲座”开头:

matched.names <- list.files(".", pattern="^lecture")
dirs <- matched.names[file.info(matched.names)$isdir]
paths <- file.path(dirs, "marks/data.csv")

一旦你有了一个路径的向量,我可能会使用lapply将数据读入一个列表以便进一步处理,并用基本目录名称命名每个:

csv.data <- lapply(paths, read.csv)
names(csv.data) <- dirs

或者,如果您对每个CSV执行的任何处理只是为了其副作用,例如修改数据和写出新版本,特别是如果您不希望所有这些处理都在内存中同时,然后使用循环。

如果这个答案错过了标记,即使它没有,那么如果你能相应地澄清这个问题就会很棒。

答案 1 :(得分:0)

我没有代码但是我会从root用户做一个隐藏的glob并执行preg_match来找到.csv文件(使用glob括号)。