【问题标题】:Importing and reading multiple files R导入和读取多个文件 R
【发布时间】:2012-10-18 18:05:12
【问题描述】:

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

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 的数据应该是三列数据

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

这里的代码和这里的代码类似:Read multiple CSV files into separate data frames

【问题讨论】:

  • 您的麻烦很好地说明了为什么使用assign 存储数据集合不能顺利工作。如果要获取变量的内容,只需使用get。或者,只需将数据放在一个列表中,详细信息请参阅我的答案。

标签: r plyr read.table


【解决方案1】:

我建议将read.table 的结果放在一个列表或一位数据帧中。此外,我建议在这里使用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",]

【讨论】:

  • 谢谢!命令llply 有效。但是使用ldply 并使用big_data[big_data$variable == "abcd1.txt"] 它返回data frame with 0 coulmns and 203400 rows。为什么?
  • 没有示例输出很难说。我猜"abcd1.txt"variable 列中不存在的条目。
猜你喜欢
  • 1970-01-01
  • 2019-11-10
  • 2018-11-22
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-18
相关资源
最近更新 更多