将多个txt文件导入R

时间:2016-06-28 08:32:40

标签: r

我正在使用MODIS 8天数据,我正在尝试将一个MODIS产品的所有txt文件导入到R中,而不是作为单个data.frame导入,作为单独的txt文件。所以我以后可以对它们应用相同的功能。主要目标是导出每个txt文件中的特定元素。我成功地使用以下命令从一个txt文件中排除了所需的元素:

# selecting the element within the table
idxs <- gsub("\\]",")", gsub("\\[", "c(",  "[24,175], [47,977], [159,520], [163,530]
                             ,[165,721], [168,56], [217,820],[243,397],[252,991],[284,277],[292,673]
                             ,[322,775], [369,832], [396,872], [434,986],[521,563],[522,717],[604,554]
                             ,[608,50],[614,69],[752,213],[780,535],[786,898],[788,1008],[853,1159],[1014,785],[1078,1070]") )

lst <- rbind( c(24,175), c(47,977), c(159,520), c(163,530) ,c(165,721), c(168,56), c(217,820),c(243,397),c(252,991),c(284,277),c(292,673),c(322,775), c(369,832), c(396,872), c(434,986),c(521,563),c(522,717),c(604,554),c(608,50),c(614,69),c(752,213),c(780,535),c(786,898),c(788,1008),c(853,1159),c(1014,785),c(1078,1070))

mat <-  matrix(scan("lst.txt",skip = 6),nrow=1200)

Clist <- as.data.frame(mat[lst])

但我需要所有txt文件中的这些元素,老实说,我不想手动运行它871次。所以我尝试读取所有txt文件,然后将此函数应用于它们。但不幸的是它不起作用。这是我的方法:

folder <- "C:/Users/Documents/R/MODIS/txt/"      
txt_files <- list.files(path=folder, pattern=".txt")

df= c(rep(data.frame(), length(txt_files)))

for(i in 1:length(txt_files)) {df[[i]]<- as.list(read.table(txt_files[i]))}

这是我遇到的错误:

**Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
  In file(file, "rt") :
  cannot open file 'rastert_a2001361.txt': No such file or directory**

附加信息:每个txt文件包含1200个和1200个列,需要从表中提取20-30个元素。

我非常期待您的回答,并感谢您对此事的任何帮助或建议。

1 个答案:

答案 0 :(得分:0)

问题是list.files仅返回文件夹中的文件名,而不是文件的完整路径。如果您的工作方向不是"C:/Users/Documents/R/MODIS/txt/",则您的代码无效。将您的代码更改为

for(i in 1:length(txt_files)) {df[[i]]<- as.list(read.table(file.path(folder, txt_files[i])))}  

现在它应该工作了。

file.path将您的路径和文件与正确的,特定于操作系统的路径分隔符相结合。