2013-05-15 14 views
0

我目前读取一系列文件,在时间施加相同的功能将这些程序之一,然后合并所得到的数据帧例如,使用值的函数:R:施加在列表

>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(“文件1”,“文件2”,“文件2”)等的列表,并应用一个功能,以更自动的方式做到这一点?这将涉及使用的目录路径列表值读取文件即

>*MyFilesValue*_DF <- read.delim("\\\\DirectoryToFolders\\*MyFilesValue*_Folder\\*MyFilesValue*.txt", stringsAsFactors=FALSE, check.names=FALSE) 

任何帮助表示赞赏

+0

尝试'list.files'和'sapply'来翻转每个文件名。 –

回答

0

下面是使用ReduceSys.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)) 
+0

你为什么使用'by.x ='Row.names',by.y ='row.names''? –