【问题标题】:Get multiline utf-8 data (2900 columns) from R into SPSS从 R 获取多行 utf-8 数据(2900 列)到 SPSS
【发布时间】:2013-09-08 06:44:50
【问题描述】:

是否有一种故障安全的方法来获取包含多行 utf8 文本的单元格的数据,其中包含从 R 到 SPSS 的许多列?最好使用保守类型。

  • 如果您说 CSV,您可能没有尝试传输 2700 列,其中偶尔包含多行文本和 utf8 字符的单元格。这似乎是不可能的。

    • 如果偶尔有包含多行的单元格,SPSS 将失败(将其视为几种情况,DELCASE 无法解决此问题,需要您知道列数)。
    • OpenOffice 可以正确处理字符集和多行,但无法处理那么多列。
    • Excel 可以处理许多列。它将默认打开逗号分隔的文件,而不是正确打开制表符分隔的文件,但它会破坏变音符号。如果您使用导入功能来修复 utf-8,它会破坏多行文本。
  • 如果你说xlsx::write.xlsx:这行得通,但要花很长时间(10m),在 SPSS 吃掉生成的 xlsx 文件之前,我必须在 Excel 中手动打开并重新保存它们(我还没有找到SPSS 不喜欢它们的地方,它认为它们是单列)。

  • 我还没有尝试在 Excel 或 SPSS 中设置数据库并使用 RMySQL + ODBC,因为那时它似乎有点矫枉过正。相比之下似乎不再那么矫枉过正,但现在我怀疑 ODBC 是否会在 Excel 或 SPSS 中做它应该做的事情。这是一种行之有效的方法吗?

编辑:回复建议foreign::writeForeign的评论:

writeForeign 不会直接保存到 .sav,它会保存像 write.table(dfn, file = datafile, row.names = FALSE, col.names = FALSE, sep = ",", quote = FALSE, na = "", eol = ",\n") 这样的 CSV 文件并生成 .sps 文件以供导入。

我的原始数据失败了,因为我的变量名超过 8 个字符(并且我会通过截断得到重复的名称,对于 2700 个变量并不奇怪。SPSS 实际上可以使用我描述的路线来处理这个问题)。如果我使用旨在展示已知缺陷的子集,它会因“无法处理超过 255 的字符变量”而失败,但如果它通常也因多行字符输入而失败,我不会感到惊讶,因为 SPSS 不似乎能够在 CSV 导入期间处理此问题。

【问题讨论】:

  • 您看过foreign 包吗?我绝对不会使用“故障安全”一词来描述它,但它提供了直接从 R 保存 .sav 文件的能力。根据我的经验,它通常有效,但我没有完全做到在复杂的数据集上进行了尝试。
  • @David 我在上面回复了。我还没有尝试过这个 DF,但它根本不起作用(以前也有过问题)。但至少它知道自己的局限性。
  • 我不清楚您为什么 CSV 失败的原因。为什么 OpenOffice 与它有任何关系? SPSS 可以导入多行文本数据,另一个简单的解决方案是用某种已知的字符集替换换行符和/或回车,然后即使不能,也可以稍后再改回来。
  • @AndyW OpenOffice 的作用很简单,就是我会在之前/而不是 Excel 之前使用它来创建适用于 SPSS 的电子表格,但是它会因为这么多列而失败,而 Excel 会因为 UTF8 字符(+ 多行)而失败。是的,替换换行符可能是一种解决方法。但是由于 SPSS 可以处理单元格中的多行文本(在我的测试中,我无法让它正确地从 CSV 导入具有不同行数的单元格,但请告诉我如何),我(我的老板)想保留新行(我可以做烦人的前后处理,但 write.xlsx 路线更好)。
  • 查看GET DATA 的语法参考,尤其是DELCASE 子命令。如果 R 提供 SPSS 语法以及它所导出的任何内容,则可能就像在 GET DATA 语句中添加该行一样简单。

标签: r excel csv utf-8 spss


【解决方案1】:

我还没有走 ODBC 路线,因为 xlsx 包的效果比预期的要好。

为了修复大型表会出现的java.lang.OutOfMemoryError: Java heap space 错误,我使用了options( java.parameters = "-Xmx3g" )(在加载 xlsx 库之前)。

也就是说,我仍在寻找不涉及手动重新保存 Excel 文档的答案。

【讨论】:

    猜你喜欢
    • 2021-03-08
    • 2012-10-03
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    相关资源
    最近更新 更多