【问题标题】:Writing a csv file with fixed width in r在r中编写具有固定宽度的csv文件
【发布时间】:2015-07-08 18:41:38
【问题描述】:

我读取一个文件,更改其内容,然后我想将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)

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

【问题讨论】:

  • CSV 是纯文本格式,我看不出有什么方法可以直接做到这一点。我想您可以将所需列宽的向量存储为 csv 的最后一行,然后编写某种 excel 宏以将这些字段应用于导入的 CSV。但这似乎有点矫枉过正......或者,不知道,也许尝试在所需长度/列的底部附加一个空白行?不知道这是否可行。
  • 强烈建议使用 minimal 代码。这个问题似乎更多地是关于调整 excel 电子表格中的列宽
  • @rawr 完全同意。已将代码精简到最低限度

标签: r excel csv


【解决方案1】:

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

您的选择是:

  1. 接受此行为。
  2. 将 Excel 中的文件重新另存为其他文件(.xls 或 .xlsx)
  3. 使用直接导出 Excel 文件的包从 R 中写入文件。 XLConnect 会做到这一点,甚至还有一个 setColumnWidth 函数来设置 R 中的列宽。

例如

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)

【讨论】:

  • 谢谢,但由于某种原因,它给了我一个空文件。我将我尝试过的代码添加到我的原始问题中。
  • @Nik 你错过了loadWorkbook 行,但我不会认为这是问题所在。 .xlsx 文件是有效的电子表格吗?它有任何工作表吗?你用什么打开它?
  • 我太愚蠢了,这很有趣(对我来说)。缺少的行修复了它。谢谢!现在效果很好!你知道我是否可以选择我要保存的文件的目录吗?
  • @Nik 只需为 loadWorkbook 函数指定一个全名,例如(在 Windows 上)“c:/folder/subfolder/file.xlsx”)
【解决方案2】:

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

如果你想要的话,也可以填充像this 这样的列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-29
    • 2011-08-04
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    相关资源
    最近更新 更多