用双头标记在R中写入.xlsx

时间:2015-08-26 11:36:47

标签: r excel data.table xlsx

是否可以使用双标头将data.frame / data.table写入.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])

说,我想有一个双头,其中Number为“One”,Date为“Two”,String为“Three”。但显然我不能将它们放在第1行,因为它们的第二列名称是字符串,而一些列是日期/数字。

对此有什么想法吗?

@Edit:例如:

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

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

2 个答案:

答案 0 :(得分:2)

例如,您可以使用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)

答案 1 :(得分:1)

你可以&#34;覆盖&#34;像这样的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)