R:从txt文件中提取数据并将数据存储在一个单元格中

时间:2015-09-08 10:14:56

标签: r list input

我有一个data.frame,其中包含元数据和包含我的数据的txt文件的文件名路径

data <- structure(list(region = structure(1:3, .Label = c("DE", "GB", "USA"), class = "factor"), name = structure(c(1L, 3L, 2L), .Label = c("File1", "Loc7812_Temp", "Loc889"), class = "factor"), txt_path = structure(c(1L,3L, 2L), .Label = c("/home/xyz/Downloads/Data/file1.txt", "/home/xyz/Downloads/Data/FolderTempData/datatemp7812.txt", "/home/xyz/Downloads/Data/Raw/datfile889.txt"), class = "factor")), .Names = c("region", "name","txt_path"), class = "data.frame", row.names = c(NA, -3L))

data
  region         name                                                 txt_path
1     DE        File1                       /home/xyz/Downloads/Data/file1.txt
2     GB       Loc889              /home/xyz/Downloads/Data/Raw/datfile889.txt
3    USA Loc7812_Temp /home/xyz/Downloads/Data/FolderTempData/datatemp7812.txt

您可以通过我的保管箱here

在文件夹结构中下载的txt文件

我想要做的是将数据包含在附加列中,以便能够将数据和元数据与另一个数据帧进行比较。问题是.txt文件中的数据具有不同的行和列长度,我不知道如何有效地存储它。

我能够使用以下命令将来自不同文件路径的数据读入列表

list <- lapply(file.path(data$txt_path), read.table, header=TRUE,sep="\t", fill=TRUE, fileEncoding="latin1")

然而,通过此步骤,我将失去与元数据的连接。我如何将这些信息存储在一个附加列中,以便将不同txt文件的全部信息放入与文件路径和元数据信息相对应的一行元素中(可能在data.frame中的列表中?在Matlab中你可以这样做通过使用结构)

在下一步中,我正在合并数据并删除重复项,这就是为什么我要打包&#39;将数据分成一行元素。

1 个答案:

答案 0 :(得分:1)

数据框在技术上是一个列表,因此它本身也可以有嵌套列表。这是一个简单的例子:

dt=data.frame(x=LETTERS[1:10],y=1:10)

z=list("a","b","c")
z=list(z,z,z,z,z,z,z,z,z,z)
dt$z=z
class(dt)
class(dt$z)
dt$z

但是,稍后使用它会非常困难。 我建议你将文件内容单独保存在列表中,并在data.frame中创建和ID变量以保持与该列表的连接:

data$ID = 1:dim(data)[1]

这样,您始终可以通过list[data$ID]

访问文件内容