【发布时间】:2015-06-13 03:04:29
【问题描述】:
目前,我的工作流程是在 R 中进行统计和数据重组,并使用 Libre Office (LO) Writer 编写文档。 R 中的分析结果通常是表格,我需要将它们放入 LO Writer。我还没有找到直接以简单的方式执行此操作的方法,所以我通常做的是:1)将表格放在 R 中,2)将表格导出为 .csv,3)在 LO Calc 中打开 .csv,4)使用特殊粘贴作为 RTF 从 LO Calc 复制到 LO writer。
保存到 .csv 时,我使用 write.csv(table_1, "table_1.csv", na = "") 来执行此操作。这导致了一个额外的步骤,因为 LO Calc 需要知道如何读取 .csv 文件。或者,可以install one of the packages 输出到 .ods 或 .xls(x)。
这样做的一个问题是,这经常会导致文件中的十进制数字很长,例如2.21931,而通常只想在文档中显示 2 或 3 位数字。对于这种烦恼,我找到了两种解决方案。
第一个是使用例如对 R 中的数字进行四舍五入。 round(table_1, 2) 然后使用上述命令保存。这样做的问题是,当将其导入 LO Calc 时,0.60 之类的数字将变为 0.6,失去一个(冗余)数字。这使得呈现有些不一致。可以将它们添加回文档中的表格中或使用 LO Calc 中的舍入函数。
第二种是使用Libre Office Calc中的舍入功能,但这需要一些额外的工作/更多工作。
最后,当重要的表格像这样进入 LO Writer 时,表格会有不可见的边框。必须为每个表手动添加这些。
在避免有效数字问题和额外点击的同时,将结果表从 R 获取到 LO Writer 的最佳方法是什么?
【问题讨论】:
-
也许是一些快捷方式:我使用(在 Windows 上)
write.table(dat, 'clipboard', sep='\t', row.names=FALSE, header=TRUE)并将其粘贴到我的电子表格中。这避免了保存和导入 CSV 的需要。至于有效数字,您是否尝试过dat[,num_columns] <- sapply(dat[,num_columns], format, digits=3)之类的东西? -
使用剪贴板不是一个坏主意。我已经尝试过
format(),但由于某种原因它将类型更改为字符。但是,我没有在sapply()中尝试过。 -
如果不转换为字符串,则无法确保在舍入后显示有效数字。否则,您需要依靠 Calc 和/或 Writer 来处理有效数字。
-
更重要的是:在电子表格中,您通常可以控制每个单元格的符号位数,但只会影响数字的显示方式,无论是浮点数还是整数。在 R 中,您通常只能在全局级别上控制有效数字(除了一些小例外),这同样不会影响数据结构内部数字的精度;它只是一个显示配置。通常 CSV 和复制/粘贴元数据不包括特定于显示的参数。因此,如果您想在复制/粘贴中强制执行此操作,则必须通过字符串。
-
我同意@AaronKatch,
sprintf是一个很好的字符串格式化工具,尽管这可能是我的 C/C++ 培训开始的原因。我经常不在建议中首先列出它,因为我的看法是format和paste是许多R 程序员的首选(我不认为这是基于性能的偏好)。
标签: r excel csv libreoffice libreoffice-calc