在r中编写固定宽度的csv文件

时间:2015-07-08 18:41:38

标签: r excel csv

我读取文件,更改其内容,然后我想将dataframe写入新文件。让我烦恼的是,Excel的宽度不能调整(它不保存更改)。 我想知道是否可以编写具有适合最长值的列宽的csv文件。

dat <- read.csv("Input.csv")

# Do some processing

#Write the new file
write.csv(dat, "Output.csv", row.names=FALSE)

编辑1:

dat <- read.csv("Input.csv")
createSheet(wb, "test")
writeWorksheet(wb, dat, "test")
colWidths <- sapply(1:ncol(dat), function(i) max(c(8, nchar(c(names(dat)[i], as.character(dat[, i]))))))
setColumnWidth(wb, "test", 1:ncol(dat), colWidths * 256)
saveWorkbook(wb)

我做错了什么?它写一个空文件。

2 个答案:

答案 0 :(得分:1)

你为csv写的宽度并不重要;打开它时,Excel将始终具有其默认列宽。

您的选择是:

  1. 接受此行为。
  2. 将文件从Excel重新保存为其他内容(.xls或.xlsx)
  3. 使用直接导出Excel文件的包从R写入文件。 XLConnect会执行此操作,甚至可以使用setColumnWidth函数在R中设置列宽。
  4. e.g。

    dat <- data.frame(x = 1:24, `Long Column Name` = 25:48, `Wide Column` = paste(LETTERS, collapse = " "))
    library("XLConnect")
    wb <- loadWorkbook("Output.xlsx", create = TRUE)
    createSheet(wb, "Output")
    writeWorksheet(wb, dat, "Output")
    colWidths <- sapply(1:ncol(dat), function(i) max(c(8, nchar(c(names(dat)[i], as.character(dat[, i])))))
    setColumnWidth(wb, "Output", 1:ncol(dat), colWidths * 256)
    saveWorkbook(wb)
    

答案 1 :(得分:0)

在R中运行write.csv之前,您可能需要在Excel中关闭.csv,因为Excel会锁定文件。

如果这是您想要的,也可以像this那样填充列。

相关问题