r - 如何创建一个 for 循环来选择表中的列,从而生成单独的数据文件?
问题描述
我之前问过一个类似的问题,但是结果是一个列表,即使数据框被拆分,尽管有两列,它们也只包含一个变量,而且我尝试运行的函数只有在有两列时才会运行具有特定标题的列)。我特别需要这些表是单独的数据框。
我有一个大约 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)
. 然后我可以将它导出到 excel 中,使用write_xlsx(datafile1, path = "1.xlsx", col_names = FALSE)
我并不特别想这样做 200 次(即datafile2 <- select(book, Time, 3)
then 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))
推荐阅读
- vector - Mapbox querySourceFeatures return empty result for VectorSource in Android
- firebase - Getting server error on firebase dynamic link CreateManagedShortLinkRequest with the Ruby client
- linux - devtoolset-7 stl_vector.h undefined reference to `std::__throw_out_of_range_fmt(char const*, ...)'
- typescript - 警告,FIREBASE_CONFIG 和 GCLOUD_PROJECT 环境变量丢失。初始化 firebase-admin 将失败
- javascript - Stay in the same Wizard Step after clicking Next Step
- c# - 有没有办法从 DbModelBuilder modelBuilder(Fluent API)访问在 SaveChanges() 上创建的主键
- node.js - 如何从模块中获取值,返回未定义的值
- python - 在 python 3.x(使用 wxPython GUI)日志记录中启用无缓冲输出
- functional-programming - 两个函数的顺序之间的语法问题
- c++ - C++ 一组字符串的所有排列