我正在尝试使用RODBC将数据从Oracle datamart拉到R中。我已经解决了我的一些问题,但我有一个基本的问题。
如何保留数据库中的格式?
使用以下命令
uapp <- sqlQuery(ch, SQL, stringsAsFactors=F)我的数据如预期的那样被检索,但是一些字段在R中被转换为数字和逻辑一次,而它们应该是字符。如果我使用以下命令,我可以绕过这个问题:
uapp <- sqlQuery(ch, SQL, stringsAsFactors=F, as.is=T)但是我“丢失”了被格式化为日期的列,因为我希望它们是这样的。
发布于 2010-11-23 04:08:55
你也陷入了一个我一直在努力解决的问题。我不能评论什么是“正确的”或“最好的”,而只能评论我过去做过的事情。
我通常会像您在第一个示例中所做的那样,在类型更改进入R时处理它们。如果您想执行后一种方法,则可以在日期进入R时转换日期。我的Oracle系统似乎总是设置为以“22-11-10”格式返回日期,解析起来非常麻烦。因此,我将在查询中使用Oracle to_char()函数将日期格式化为R可以轻松识别的内容。
因此,例如,我可能在我的SELECT语句中包含以下内容:
to_char(myDate, 'yyyy-mm-dd') as myDate然后我将其放入一个名为myData的数据框中,并执行以下操作:
myData$properDate <- strptime(myData$myDate, "%Y-%m-%d")是处理固定日期还是处理其他字段,实际上取决于您有多少日期字段,以及第一种方法弄乱了多少非日期字段。但根据我的经验,我要么修好其中一个,要么修好另一个。
在使用方法1时,您可能会考虑以下几点:尝试在SQL中使用cast(),以便将字段强制转换为特定类型。我在RODBC干扰我的数据类型时遇到的唯一问题是服务器端的类型不明确。这通常是在SQL端的CASE语句或诸如此类的语句的结果。
发布于 2017-05-11 05:07:22
as.is参数可以是布尔向量。
因此,如果您的结果集由两个日期列和一个字符列组成,您可以这样做:
uapp <- sqlQuery(ch, SQL, stringsAsFactors = FALSE, as.is = c(FALSE, FALSE, TRUE))编辑:按照Kalin的建议,你也可以引用那些应该是“原样”的列。例如
uapp <- sqlQuery(ch, SQL, stringsAsFactors = FALSE, as.is = c(2, 4))将把第二列和第四列保留为“原样”。
https://stackoverflow.com/questions/4249184
复制相似问题