如何从列表中的多个data.frames导出一列

时间:2017-01-07 18:15:55

标签: r dataframe

我在列表中有多个data.frames(26)。 dfs具有相同的结构,但我想只工作/导出两个不同的列。我可以将所有dfs导出到单个dfs

for(i in filelist){
    list2env(setNames(filelist, paste0("names(filelist[[i]])",
             seq_along(filelist))), envir = parent.frame())}

我可以删除所有dfs中的列

for(i in seq_along(filelist)){filelist[[i]]$V5 = NULL}

但我不能单独导出其他列。从单个data.frame,它只是工作:

token_out_mk_totatyafiak_02.txt = out_mk_totatyafiak_02.txt["V2"]
type_out_mk_totatyafiak_02.txt = out_mk_totatyafiak_02.txt["V1"]

当我尝试这些

for(i in seq_along(filelist)){n[[i]] <- filelist[[i]]$V2}

for(i in seq_along(filelist)){
    sapply(filelist, function(x) n <- filelist[[i]]$V2)
   }

我实现的最多,我可以读取所有26个dfs中最后一个df的第二列。

V2看起来像:

        V2

1       az

2        a

3   f
ekete

4     folt

(等等,这些都是匈牙利短篇小说......)

1 个答案:

答案 0 :(得分:1)

根据您的预期结果,您有多种选择。

如果您想要一个新列表,您的数据框只包含一个特定列。

new_filelist <- 
  lapply(filelist, function(df){
    df["V2"]
  })

如果要将所有数据框的特定列导出到文件,请在单独的文件中(在本例中为.txt文件)。

这需要命名列表中的数据框。如果不是,则可以将names(filelist)替换为1:length(filelist)

lapply(names(filelist), function(df){
  df_filename <- paste0(df, ".txt")
  write.table(filelist[[df]]["V2"], df_filename)
})

如果您想在环境中为所有数据框分配一个特定列的新对象。

同样,这需要命名您的数据框。

lapply(names(filelist), function(df){
  assign(df, filelist[[df]]["V2"], envir = .GlobalEnv)
})