将 Dataframe 划分为多个Excel文件和多个工作表(最好使用“openxlsx”包)

jm81lzqq  于 2023-01-15  发布在  其他
关注(0)|答案(1)|浏览(190)

我在R中有一个 Dataframe ,如下所示:

State   Type    Index1  Index2
AL      101     0,00    0,21
AL      101     0,79    0,59
AL      101     0,95    0,05
AL      201     0,55    0,77
AL      201     0,87    0,54
AL      201     0,04    0,07
AL      301     0,78    0,99
AL      301     0,34    0,66
AL      301     0,95    0,54
AK      101     0,54    0,38
AK      101     0,88    0,25
AK      101     0,04    0,82
AK      201     0,53    0,83
AK      201     0,16    0,73
AK      201     0,04    0,58
AK      301     0,58    0,14
AK      301     0,44    0,64
AK      301     0,13    0,61
AZ      101     0,31    0,09
AZ      101     0,35    0,23
AZ      101     0,36    0,20
AZ      201     0,87    0,31
AZ      201     0,41    0,64
AZ      201     0,30    0,04
AZ      301     0,94    0,05
AZ      301     0,65    0,16
AZ      301     0,57    0,79
AR      101     0,42    0,67
AR      101     0,81    0,79
AR      101     0,23    0,37
AR      201     0,17    0,32
AR      201     0,41    0,47
AR      201     0,60    0,79
AR      301     0,57    0,07
AR      301     0,76    0,17
AR      301     0,89    0,23

我需要用包“openxlsx”将其划分为多个Excel文件。每个文件都应该有名称“[State].xlsx”,并包含三个名称为类型101、201和301的唯一值的表。每个表(“101”、“201”、“301”)应包含初始 Dataframe 中的所有四列,但仅包含类型与工作表名称相同的单元格。是必要的,因为每个Excel文件的布局也应该格式化,而我所理解的“openxlsx”在r中的其他包中提供了最好的机会。
我已经按照州名将 Dataframe (最初导出为.csv)划分为几个Excel文件。

state_type_relation <- read.csv("dataframe.csv", header = T, sep =";", dec =",", encoding = "UTF-8")
state_type_relation_split <- split(state_type_relation, state_type_relation$State)
names <- names(state_type_relation_split)
paths = paste0("T:/", names, ".xlsx")
for (i in seq_along(state_type_relation_split))
{
  write.xlsx(state_type_relation_split[[i]], paths[i])
}

但是我仍然不明白如何在每个文件中创建名称为类型的工作表。谢谢你的帮助!

but5z9lq

but5z9lq1#

for循环中,您可以在导出到XL之前,对Type要导出的数据进行split

library(openxlsx)

# Create a temp directory
path <- tempdir()

state_type_relation_split <- split(state_type_relation, state_type_relation$State)
fn <- names(state_type_relation_split)
paths = file.path(path, paste0(fn, ".xlsx"))

for (i in seq_along(state_type_relation_split)) {
  dat <- split(state_type_relation_split[[i]], state_type_relation_split[[i]]$Type)
  write.xlsx(dat, paths[[i]])
}

# Check that three Sheets have been created
lapply(paths, readxl::excel_sheets)
#> [[1]]
#> [1] "101" "201" "301"
#> 
#> [[2]]
#> [1] "101" "201" "301"
#> 
#> [[3]]
#> [1] "101" "201" "301"
#> 
#> [[4]]
#> [1] "101" "201" "301"

相关问题