我以前也问过类似的问题,但结果是一个列表,即使数据帧被拆分,它们也只包含一个变量,尽管有两列,并且我试图运行的函数只有在有两列具有特定标题的情况下才会运行(。我特别需要这些表是独立的数据帧。
我有一个表(称为"书"(,大约有200列,时间在第一列,然后是从2开始的实际数据。它看起来像这样:
Time 1 2 3 4 5
0 0 0 0 0 0
1 3 4 5 6 7
2 8 9 1 2 3
3 4 5 6 7 8
我需要将每一列拆分成单独的文件,所以它看起来像这样:
Time 1
0 0
1 3
2 8
3 4
然后
Time 2
0 0
1 4
2 9
3 5
等等。
我可以使用dplyr包和datafile1 <- select(book, Time, 2)
来完成此操作。然后我可以使用write_xlsx(datafile1, path = "1.xlsx", col_names = FALSE)
将其导出到excel我并不特别想做200次(即datafile2 <- select(book, Time, 3)
然后write_xlsx(datafile2, path = "2.xlsx", col_names = FALSE)
(,所以我尝试创建一个for循环,这样我就可以自动化这个过程。
n=200
for(i in 2:n){
file_name = paste("datafile", toString(i-1), sep="")
file_name <- select(book, T, i)
write_xlsx(datafile, path = "(i-1).xlsx", col_names = FALSE)
}
然而,循环似乎并没有运行,它只是在i=200时运行一次。此外,在末尾创建的excel文件的名称是(i-1(,而不是实际变量-1(即200-1,应该是199(。我想,好吧,我把某个地方搞砸了,文件的命名不能是一个变量。但是,如果我使用path="file_name.xlsx",col_name=FALSE,它仍然称它为"file_name",而不是像我指定的那样称为datafile199。
任何帮助都将不胜感激。
您可以使用lapply
:
library(writexl)
library(dplyr)
library(purrr)
lapply(2:ncol(book), function(x)
write_xlsx(book[c(1, x)], path = paste0(x-1, ".xlsx"), col_names = FALSE))
或者如果你想在tidyverse
中进行
map(2:ncol(book), ~write_xlsx(select(book, c(1, .x)),
path = paste0(x-1, ".xlsx"), col_names = FALSE))