Если вы хотите сохранить числовую природу данных, я не думаю, что мы можем сделать это с помощью простого однострочного (ответ, предоставленный @Chase, меняет тип данных на символ), но мы можем это сделать с помощью нескольких манипуляций, которые сначала записывают names(d)
и два комментария в файл, а затем используют write.table()
для записи строк данных csv, добавляя к файлу, к которому мы только что написали имена и комментарии:
write.csv3 <- function(d, file) {
opts <- options(useFancyQuotes = FALSE)
on.exit(options(opts))
h1 <- paste(dQuote(c("", names(d))), collapse = ",")
h2 <- paste(dQuote(c("", comment(d$a), comment(d$b))), collapse = ",")
writeLines(paste(h1, h2, sep = "\n"), file)
write.table(d, file, sep = ",", append = TRUE, col.names = FALSE)
}
Вот пример:
> d <- data.frame(a=c(1,3,4), b=c(5,6,7))
> comment(d$a) <- "MWh"
> comment(d$b) <- "%"
> d
a b
1 1 5
2 3 6
3 4 7
> write.csv3(d, file = "myfile.csv")
, который производит следующий файл:
$ cat myfile.csv
"","a","b"
"","MWh","%"
"1",1,5
"2",3,6
"3",4,7
по сравнению с ответом @ Chase's:
$ cat output.csv
"","a","b"
"1","MHh","%"
"2","1","5"
"3","3","6"
"4","4","7"
Между ними у вас должно быть достаточно вариантов.