使用R将多个数据帧写入.csv文件

时间:2014-11-03 04:19:42

标签: r export-to-csv lapply

我使用lapply将函数应用于多个数据框:

data.cleaned <- lapply(data.list, shooter_cleaning)

然后根据主题编号(例如,100)标记列表中的每个结果数据框:

names(data.cleaned) <- subject.names

我想要做的是根据主题编号将每个新数据框保存为单独的.csv文件。例如,对于主题100,我希望将.csv文件标记为&#34; 100.csv&#34;通常这样做(对于单个数据帧)我只会写(其中x是数据帧):

write.csv(x, "100.csv", row.names = F)

但是,显然使用lapply来为我的数据框列表执行此操作只会生成许多副本&#34; 100.csv&#34;相反,我希望文件是唯一的,基于他们的主题编号。我如何(使用apply to?)将每个数据帧保存到自己唯一的.csv文件中?

3 个答案:

答案 0 :(得分:10)

这是理查德评论中的self-contained example,但使用列表中数据框的名称作为CSV文件的文件名:

# Create a list of n data frames

n <- 10

my_list <- lapply(1:n, function(i)  data.frame(x = rnorm(10), y = rnorm(10)) )

# name the data frames

names(my_list) <- letters[1:n]

# save each new data frame as an individual .csv file based on its name

lapply(1:length(my_list), function(i) write.csv(my_list[[i]], 
                                      file = paste0(names(my_list[i]), ".csv"),
                                      row.names = FALSE))

答案 1 :(得分:0)

如果这有帮助:我有一个包含多个数据帧的环境,只有那些数据帧,我想将每个数据帧作为单独的CSV文件输出。在Ben的回答和发现mget的帮助下,我能够使用以下代码执行此操作:

for(i in 1:length(ls())) {
  write.table(
  mget(ls()[[i]]),
  file = paste0(ls()[[i]], ".csv"),
  sep = ";",
  qmethod = "double",
  row.names = FALSE)
}

答案 2 :(得分:0)

通常,此操作以data.fame开始,该数据被分成列表,然后写入许多单独的csvs。

library(readr)

# example data.frame
df  <- data.frame(x=1:4, y=c("a","a","b","b"))

# split into a list by the y column
l   <- split(df, df$y)

# the names of the list are the unique values of the y column
nam <- names(l)

# iterate over the list and the vector of list names and write csvs
for(i in 1:length(l)) {
  write_csv(l[[i]], paste0(nam[i], ".csv"))
}

您可以使用purrr::mappurrr::walk实现相同的功能。我建议使用第二个来写文件,因为您不想将每个data.frame打印到控制台。

library(tidyverse)
nam %>% 
  purrr::walk( 
    ~write_csv(l[[.]], paste(., ".csv"))
  )