我目前正在阅读一系列文件,一次一个地应用相同的功能,然后合并结果数据框,例如:
>MyRows <- c("RowA", "RowB", "RowC")
>
>File1_DF <- read.delim("\\\\DirectoryToFiles\\File1_Folder\\File1.txt", stringsAsFactors=FALSE, check.names=FALSE)
>File1_DF <- as.data.frame(t(File1_DF[MyRows,]))
>File1_DF <- as.data.frame(t(File1_DF))
>mergeDF <- merge(mergeDF,File1_DF, by.x = "Row.names", by.y="row.names")
>
>File2_DF <- read.delim("\\\\DirectoryToFiles\\File2_Folder\\File2.txt", stringsAsFactors=FALSE, check.names=FALSE)
>File2_DF <- as.data.frame(t(File2_DF[MyRows,]))
>File2_DF <- as.data.frame(t(File2_DF))
>mergeDF <- merge(mergeDF,File2_DF, by.x = "Row.names", by.y="row.names")
...等
我想知道我是否可以使用文件名列表c(“File1”,“File2”,“File2”)等,并应用一个函数来实现更自动化的功能?这将涉及使用目录路径中的列表值来读取文件,即
>*MyFilesValue*_DF <- read.delim("\\\\DirectoryToFolders\\*MyFilesValue*_Folder\\*MyFilesValue*.txt", stringsAsFactors=FALSE, check.names=FALSE)
任何帮助表示赞赏
答案 0 :(得分:0)
以下是使用Reduce
和Sys.glob
的一种方式。
fpaths <- Sys.glob(file.path('\\\\DirectoryToFiles\\File1_Folder\\', 'File*.txt'))
dfs <- lapply(fpaths, read.delim, stringsAsFactors=FALSE, check.names=FALSE)
dfs <- lapply(dfs, function(df) as.data.frame(t(as.data.frame(t(df[MyRows,])))))
merge.fun <- function(mergeDF, nextDF) {
merge(mergeDF, nextDF, by.x='Row.names', by.y='row.names')
}
result <- Reduce(merge.fun, c(mergeDF, dfs))