написать CSV с двумя строками заголовка? - PullRequest
7 голосов
/ 28 февраля 2011

Могу ли я экспортировать data.frame в csv с двумя строками заголовка, одной строкой для имен столбцов и одной строкой для комментариев к именам столбцов? Например,

d <- data.frame(a=c(1,3,4), b=c(5,6,7))
comment(d$a) <- "MWh"
comment(d$b) <- "%"
write.csv(d, "myfile.csv", ???)

Любая подсказка приветствуется, также об альтернативах комментарию ()!

Ответы [ 2 ]

8 голосов
/ 28 февраля 2011

Если вы хотите сохранить числовую природу данных, я не думаю, что мы можем сделать это с помощью простого однострочного (ответ, предоставленный @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"

Между ними у вас должно быть достаточно вариантов.

4 голосов
/ 28 февраля 2011

Будет ли rbind() добавление ваших комментариев в начало вашего data.frame вариантом перед записью? Если вы создадите новый объект, вы не будете влиять на структуру или класс существующих столбцов.

d <- data.frame(a=c(1,3,4), b=c(5,6,7))
output <- rbind(c("MHh", "%"), d)
write.csv(output, "output.csv")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...