首页 > 解决方案 > openxlsx 中的自定义列名

问题描述

我将使用 openxlsx 生成报告。

我有一个数据框,其列名对最终用户不友好。所以我想生成一个带有自定义列的excel文件。我已经想出了如何使用 忽略列名colNames = FALSE,但是添加我需要的名称的最佳方法是什么?

report <- createWorkbook('report.xlsx')

addWorksheet(report, 'test')

# how to add column names

writeData(report, sheet = 1, df, colNames = FALSE)

saveWorkbook(report, 'report.xlsx', overwrite = TRUE)

标签: ropenxlsx

解决方案


重命名列名可能比忽略它们更好。例如:

library(tidyverse)
library(openxlsx)

wb = createWorkbook()

sht = addWorksheet(wb, "data")

mtcars %>%
  rename(Cylinders = cyl, 
         `Miles per Gallon` = mpg) %>%
  writeData(wb, sht, .)

saveWorkbook(wb, "myworkbook.xlsx")

如果您要生成这样的常规报告,您可以创建一个包含新名称/旧名称对的向量以进行重命名。例如:

# Renaming vector
rename.vec = c("Cylinders"="cyl",
               "Miles per Gallon"="mpg",
               "Displacement"="disp")

# Example of renaming using the vector we just created
mtcars %>% 
  rename(!!!rename.vec) %>% 
  head
                  Miles per Gallon Cylinders Displacement  hp drat    wt  qsec vs am
Mazda RX4                     21.0         6          160 110 3.90 2.620 16.46  0  1
Mazda RX4 Wag                 21.0         6          160 110 3.90 2.875 17.02  0  1
Datsun 710                    22.8         4          108  93 3.85 2.320 18.61  1  1
Hornet 4 Drive                21.4         6          258 110 3.08 3.215 19.44  1  0
Hornet Sportabout             18.7         8          360 175 3.15 3.440 17.02  0  0
Valiant                       18.1         6          225 105 2.76 3.460 20.22  1  0
                  gear carb
Mazda RX4            4    4
Mazda RX4 Wag        4    4
Datsun 710           4    1
Hornet 4 Drive       3    1
Hornet Sportabout    3    2
Valiant              3    1
# Write data to a worksheet, renaming columns on the fly
writeData(wb, sht, mtcars %>% rename(!!!rename.vec))

推荐阅读