首页 > 解决方案 > 将 CSV 文件转储到 Postgres 并在 R 中读取,同时保持列数据类型

问题描述

我是 R 新手,并且正在正确地处理从 csv 文件读取到数据库的项目重构代码。

这项工作包括将 csv 文件转储到 Postgres 数据库,并修改现有的 R 脚本以从 db 表而不是 csv 文件中提取输入数据以进行后续转换

现在我遇到了一个问题,即从 dbGetQuery() 返回的数据帧列与来自 read_csv() 的原始数据帧具有不同的模式和类

由于我正在读取的数据有数百列,因此为每列显式指定模式和类并不方便。

有没有一种简单的方法可以使数据帧与旧数据帧具有相同的模式,所以我可以将现有代码应用于数据帧上的数据转换

即,当我在旧数据帧和来自 db 的新数据帧之间进行比较时,这就是我所看到的

  ==================================
   VARIABLE  CLASS.(from csv)  CLASS.(from db)
  ----------------------------------
   col1     numeric           integer64
   col2     numeric           integer
   col3     numeric           integer
  ----------------------------------

标签: rdataframeetlrscript

解决方案


这通常是不可能的,因为某些 SQL 数据类型(例如 DATE、TIMESTAMP、INTERVAL)在 R 中没有等价物,而 R 数据类型因子在 SQL 中也没有等价物。根据您的 R 版本,字符串会自动转换为因子,因此使用stringsAsFactors=FALSE.


推荐阅读