用 double header 在 R 中写入 .xlsx

Write .xlsx in R with double header

是否可以将数据.frame/data.table 写入带有双 header 的 .xlsx?我的数据包含数字、日期和字符串列。请在下面找到示例。

example <- data.frame(Number=c(1:5),
                      Date=as.Date('1999-10-31','1999-10-31','1999-10-31','1999-10-31','1999-10-31','1999-10-31'),
                      String=LETTERS[1:5])

说,我想要一个双 header,数字为 "One",日期为 "Two",字符串为 "Three"。但显然我不能将它们放在第 1 行,因为它们的第 2 列名称是字符串,有些列是 dates/numerics.

对此有什么想法吗?

@编辑:示例:

example <- data.frame(Number=c("One",as.character(1:5)),
                      Date=c("Two",'1999-10-31','1999-10-31','1999-10-31','1999-10-31','1999-10-31'),
                      String=c("Three",LETTERS[1:5]))

 Number       Date String
1    One        Two  Three
2      1 1999-10-31      A
3      2 1999-10-31      B
4      3 1999-10-31      C
5      4 1999-10-31      D
6      5 1999-10-31      E

但现在显然所有列都是字符串...我需要它们作为特定字段的数字和日期。谢谢

你可以 "override" write.csv() 那样的功能

New_write.csv <- function(file,example)
{
    Header1 <- paste(names(example),collapse=",")
    Header2 <- paste(c("one","Two","Three"),collapse=",")
    writeLines(paste(Header1,Header2,sep="\n"),file)
    write.table(example, file, sep = ",", append = TRUE, col.names = FALSE,row.names=F)
}

然后像这样正常调用它:

New_write.csv("example.csv",example)

例如,您可以使用 XLConnect 包。这是一个使用 mtcars 数据的玩具示例。您只需要分两步进行:首先仅写入 colnames(在 data.frame 中),然后照常从第 2 行开始写入数据。

library(XLConnect)
header <- data.frame(t(colnames(mtcars)))
header
##    X1  X2   X3 X4   X5 X6   X7 X8 X9  X10  X11
## 1 mpg cyl disp hp drat wt qsec vs am gear carb
writeWorksheetToFile(file = "/tmp/file.xlsx", data = header, sheet = "test",
                     startRow = 1, header = FALSE)

### Write the data as usual keeping the colnames
writeWorksheetToFile(file = "/tmp/file.xlsx", data = mtcars, sheet = "test",
                     startRow = 2)

使用您提供的数据,您可以这样做:

header <- as.data.frame(rbind(c("One", "Two", "Three")))
example <- data.frame(Number=c(1:5),
                      Date=as.Date('1999-10-31','1999-10-31',
                                   '1999-10-31','1999-10-31',
                                   '1999-10-31','1999-10-31'),
                      String=LETTERS[1:5])


writeWorksheetToFile(file = "/tmp/file2.xlsx", data = header, sheet = "test",
                     startRow = 1, header = FALSE)
writeWorksheetToFile(file = "/tmp/file2.xlsx", data = example, sheet = "test",
                     startRow = 2)