用两个标题行写csv?

Kar*_* W. 8 r

我可以将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", ???)
Run Code Online (Sandbox Code Playgroud)

任何暗示赞赏,也评论()的替代品!

Rei*_*son 11

如果你想保留数据的数字特性,我认为我们不能用一个简单的单行代码(@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)
}
Run Code Online (Sandbox Code Playgroud)

这是一个例子:

> 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")
Run Code Online (Sandbox Code Playgroud)

其中产生以下文件:

$ cat myfile.csv 
"","a","b"
"","MWh","%"
"1",1,5
"2",3,6
"3",4,7
Run Code Online (Sandbox Code Playgroud)

与@ Chase的答案相比:

$ cat output.csv 
"","a","b"
"1","MHh","%"
"2","1","5"
"3","3","6"
"4","4","7"
Run Code Online (Sandbox Code Playgroud)

在两者之间,你应该有足够的选择.


Cha*_*ase 5

在写出来之前是否可以将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")
Run Code Online (Sandbox Code Playgroud)