我正在尝试从数据框中提取网站列表,然后从文件夹中加载与这些网站名称匹配的.csv文件。
我找到了多种方法来加载给定目录中的所有文件,但却无法找到任何适合回答我问题的内容。正如我在其他示例中看到的那样,没有用于对文件名进行子集化的常用功能。有超过150个站点,所以我不想每次都加载所有的.csv文件。
有没有办法在文件夹中选择与列表中的名称匹配的文件子集,并且只加载这些文件?加载这些文件后,我需要对每个文件执行相同的分析,因此我正在寻找一种加载这些文件的方法,以使这种进一步的分析尽可能高效。
非常感谢任何帮助。
trials<-read.csv("trial_associations.csv")
trials
site.name red blue green yellow
upper.hill yes no yes no
lower.hill yes yes no yes
upper.lake no no yes yes
lower.lake no yes yes no
site<-trials[trials$red=="yes",]
sitelist<-data.frame(site[,1])
站点列表的例子
site.name
upper.hill
lower.hill
etc.
sitenames文件夹中的示例文件 - 每个文件有四列带标题和〜5800行
a b c d
yes no no yes
no yes no no
yes yes yes yes
no no yes no
sitenames文件夹中的文件名
upper.hill.csv
lower.hill.csv
lower.lake.csv
upper.lake.csv
etc
然后我需要使用sitelist中的名称从工作目录中的sitenames文件夹加载.csv文件。
我用过
list.files(dir)
获取目录中的文件列表。但我不确定如何利用站点列表中的名称来访问sitenames文件夹中的某些文件。
我希望这会让事情变得更加清晰,谢谢
答案 0 :(得分:2)
您可能用于获取所有文件的代码与获取某些文件所需的代码非常相似。通常,要获取导演中的所有文件,请使用list.files('myDir')
或其他类似文件。只需运行该部分代码,看看结果如何。你会看到它只是一个包含所有文件名称的字符向量。
一旦你明白这很容易。您可以通过另一种方式获取角色向量,或者只是将此角色向量子集化。例如,如果您想要的文件列表位于名为“文件列表”的文件中,那么您可以使用scan
获取名称。
fList <- scan('file list')
现在你可以在......
中阅读所有这些文件dList <- lapply(fList, read.table)
......或类似的东西。您已经拥有了可以适应的代码。如果您只想要所有文件的randome子集,那么这样就足够了。
fList <- list.files(`myDir') #or leave out 'myDir' for working directory - this gets all files names
subfList <- sample(fList, 4) #just get a random 4 files
也许这会让你开始。很难推荐更精确的东西。