用 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)
是否可以将数据.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)