【问题标题】:Preferred data format for R dataframeR 数据框的首选数据格式
【发布时间】:2013-02-17 00:02:52
【问题描述】:

我正在用 Python 编写数据收集代码。我想生成一个尽可能容易导入 R 的数据框文件。我可以完全控制我的 Python 代码将产生什么,并且我想避免在 R 端进行不必要的数据处理,例如将列转换为因子/数字向量等。另外,如果可能的话,我希望在 R 端尽可能轻松地导入该数据,最好是通过使用单个文件名参数调用单个函数。

我应该如何将数据存储到文件中才能实现这一点?

【问题讨论】:

  • 嗨 liori,这看起来不是一个统计问题(请参阅常见问题解答中给出的 stats.SE 的范围),而是一个纯粹的 R 问题,在这种情况下,它应该迁移到 stackoverflow,哪里是主题。
  • 已经有一些关于 SO 的相关问题,带有r 标签,可能对您有用。如果似乎没有任何帮助,您可能想编辑您的问题(可能会迁移到那里)以添加一些明确的详细信息(例如数据有多大,您最终需要在数据框中使用哪些数据类型) 并寻求更具体的回应。
  • @Glen_b:啊,对不起。你能链接相关的SO问题吗?我找不到任何东西……或者我的查询没有使用正确的关键字。
  • 究竟哪些问题与您最相关取决于我没有的详细信息(但我认为您有)。例如,可能与 rpy2 相关的问题具有一定的相关性,或者与导入数据库相关的问题可能更相关。抱歉,我无法提供更直接的帮助 - 如果有更多详细信息,也许吧。
  • 我不认为这是可以回答的,如目前所述。我想你可以深入研究 R Internals 并弄清楚如何从 Python 编写一个可以通过load 加载的序列化对象,但这似乎是很多不必要的工作。我只想写一个分隔的文本文件并完成它。

标签: python r dataframe


【解决方案1】:

您可以使用http://docs.python.org/2/library/csv.html Python 的csv 模块将数据写入CSV,然后在R 中使用read.csv 很简单。(请参阅?read.csv

当您使用read.csv 将数据读入 R 时,除非您另外指定,否则字符串将被转换为因子,数字字段将被转换为数字。空值将转换为NA

导入一些数据后,您应该做的第一件事是查看其中的?str,以确保其中包含的数据类别符合您的期望。很多次我犯了一个错误,在数字字段中混合了一个字符值,最终得到了一个因子而不是一个数字。

需要注意的一点是,您可能必须设置自己的 NA 字符串。例如,如果您有“-”、“.”或其他一些表示空白的字符,则需要使用na.strings 参数(它可以接受字符串向量,即c("-","."))来@ 987654330@.

如果您有日期字段,则需要正确转换它们。如果您不指定日期或时间,R 不一定能识别它们(请参阅?as.Date

如果您事先知道每一列将是什么,您可以使用colClasses 指定类。

通读?read.csv 将为您提供更详细的信息。但我已经概述了一些常见问题。

【讨论】:

  • +1。当需要在 Python 和 R 之间传递数据时,我也经常使用 CSV 作为一种通用格式。它并不是所有情况(例如,非常大的数据文件)的最佳解决方案,但实际上它对大多数情况都适用。跨度>
  • 我在考虑这个问题,如果他可以直接从 python 调用 Rpy,他也许可以使用 R 的内置序列化(readRDS、saveRDS),它们非常快并且可以完美地保持它们的格式。
  • 是的(在问题的 cmets 中)。
【解决方案2】:

如果您的数据不是很大,特别是如果它不包含大量浮点值,那么使用 CSV 的 Brandon 建议非常好,在这种情况下,CSV 格式效率极低。

更好地处理大型数据集的一个选项可能是在pandas 中构造一个等效的DataFrame,并使用其工具转储到hdf5,然后以这种方式在R 中打开它。参见 this question 的例子。

这种其他方法感觉有点矫枉过正,但您也可以使用 pandas's experimental R interface 直接将内存中的数据帧传输到 R,然后直接从 R 中保存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    相关资源
    最近更新 更多