R:从路径读取txt文件,并使用lapply将ID附加到list元素

时间:2015-09-25 12:35:48

标签: r lapply

我正在读取来自我的硬盘上的路径(所有位于不同位置)的txt文件中的数据,这些数据来自数据框df

df <- structure(list(id = 1:4, path = structure(c(1L, 3L, 1L, 2L), .Label = c("C:/temp/TestA.txt","C:/temp/TestD/bla.txt", "C:/temp/TestZ/name1.txt"), class = "factor"), metadata = structure(c(2L, 1L, 4L, 3L), .Label = c("dummy", "test1", "UU_QQ", "ZZZ_TTT"), class = "factor")), .Names = c("id", "path", "metadata"), class = "data.frame", row.names = c(NA, -4L))

id                    path metadata
1  1       C:/temp/TestA.txt    test1
2  2 C:/temp/TestZ/name1.txt    dummy
3  3       C:/temp/TestA.txt  ZZZ_TTT
4  4   C:/temp/TestD/bla.txt    UU_QQ

我正在使用lapply

以下列方式将数据读入列表
data_list <- lapply(df$path, read.table, sep=";", header=TRUE, fill=TRUE, fileEncoding="latin1")

我怎样才能将id参数包含在新列表中?

2 个答案:

答案 0 :(得分:1)

你可以这样做:

data_list <- lapply(1:nrow(df), function(i){
   data_list <- read.table(df$path[i], sep=";", header=TRUE, fill=TRUE, fileEncoding="latin1")
   data_list$id <- df$id[i]
   return(data_list)
})

答案 1 :(得分:0)

另一个选项是Map cbind。我们将list data.frameslapply(...))和'id'列作为Map的参数传递,使用cbind作为FUNdata.frame中的每个list创建相应的“ID”列。

data_list <- Map(cbind, lapply(df$path, read.table, sep=";", 
                header=TRUE,fill=TRUE, fileEncoding='Latin1'), id=df$id)