我正在用 Python 编写数据收集代码。我想生成一个尽可能容易导入 R 的数据框文件。我可以完全控制我的 Python 代码将产生什么,并且我想避免在 R 端进行不必要的数据处理,例如将列转换为因子/数字向量等。另外,如果可能的话,我希望在 R 端尽可能容易地导入该数据,最好是通过调用带有文件名的单个参数的单个函数。
我应该如何将数据存储到文件中才能实现这一点?
您可以使用http://docs.python.org/2/library/csv.html Python 的模块将数据写入 CSV ,然后在 Rcsv
中使用就很简单了。(请参阅)read.csv
?read.csv
当您使用 将数据读入 Rread.csv
时,除非您另外指定,否则字符串将被转换为因子,数字字段将被转换为数字。空值将转换为NA
.
导入一些数据后,您应该做的第一件事是查看其中的数据?str
,以确保其中包含的数据类别符合您的期望。很多次我犯了一个错误,在数字字段中混合了一个字符值,最终得到了一个因子而不是一个数字。
需要注意的一件事是您可能必须设置自己的 NA 字符串。例如,如果您有“-”、“.”或其他一些表示空白的字符,则需要使用na.strings
参数(可以接受字符串向量,即c("-",".")
)来read.csv
.
如果您有日期字段,则需要正确转换它们。如果您不指定日期或时间,R 不一定能识别它们(请参阅 参考资料?as.Date
)
如果您事先知道每列将是什么,您可以使用colClasses
.
彻底阅读?read.csv
将为您提供更详细的信息。但我已经概述了一些常见问题。
如果您的数据不是很大,特别是如果它不包含大量浮点值,那么使用 CSV 的 Brandon 的建议非常好,在这种情况下,CSV 格式效率极低。
更好地处理大型数据集的一个选项可能是在pandas中构建一个等效的 DataFrame并使用它的工具转储到 hdf5,然后以这种方式在 R 中打开它。例如,请参阅此问题以获取示例。
这种另一种方法感觉有点矫枉过正,但您也可以使用pandas 的实验性 R 接口直接将内存中的数据帧传输到 R ,然后直接从 R 中保存。