我使用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文件中?
答案 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::map
或purrr::walk
实现相同的功能。我建议使用第二个来写文件,因为您不想将每个data.frame打印到控制台。
library(tidyverse)
nam %>%
purrr::walk(
~write_csv(l[[.]], paste(., ".csv"))
)