2012-10-29 95 views
2

我有许多制表符分隔的.txt文件,名为“abcd001.txt,abcd002.txt” ....存储在一个目录中。 我能够使用以下代码导入它们(其中默认目录与数据文件目录相同)。它的三列,所有数字类型数据导入和读取多个文件R

filenames <- list.files(path=".",pattern="abcd+.*txt") 

#list of data in R 
names <-substr(filenames,1,6) 


for(i in names){ 
    filepath <- file.path(".",paste(i,".txt",sep=",")) 
    assign(i, read.table(filepath, 
    colClasses=c("numeric"), 
    sep = "\t")) 
} 

该代码本身没有返回任何错误。我的疑问是如何访问正在加载的数据?如何访问说abcd011.txt文件的数据应该是三列数据

命令:names [3]只是返回文件号000002但是没有数据。

此处的代码与此处的代码类似:Read multiple CSV files into separate data frames

+1

您的麻烦很好地说明了为什么使用'assign'来存储数据集合不能顺利进行。如果你想获得变量的内容,只需使用'get'。或者,只需将数据放入列表中,查看我的答案以获取详细信息。 –

回答

8

我建议将read.table的结果放在列表中,或者放在一个位data.frame中。另外,我建议在这里使用apply样式循环,标准R(lapply)或plyr。我更喜欢使用plyr,所以我的示例将使用该包。举个例子:

## Read into a list of files: 
filenames <- list.files(path=".",pattern="abcd+.*txt") 
list_of_data = llply(filenames, read.table, 
             colClasses = c("numeric"), sep = "\t") 

访问数据现在可以使用来完成:

list_of_data[[1]] 
list_of_data[["abcd1.txt"]] 

或者你可以读取文件的内容到一个大data.frame

big_data = ldply(filenames, read.table, 
          colClasses = c("numeric"), sep = "\t")) 

访问内容的文件现在可以使用:

big_data[big_data$variable == "abcd1.txt",] 
+0

谢谢!命令'llply'工作。但是使用'ldply'并使用'big_data [big_data $ variable ==“abcd1.txt”],它返回了'0 coulmns和203400 rows'的数据帧。为什么? – Asunius

+0

没有示例输出就很难说。我猜''abcd1.txt“'是'variable'列中不存在的条目。 –