行数R通过ODBC连接检查以确定数字格式

时间:2018-02-17 11:50:59

标签: r odbc rodbc

我正在读取一个大约2 GB的大型csv文件。读取的数据成功。问题是,在查看模式下检查数据时,我发现许多数字格式列的小数部分被截断。我能够找出问题是R正在扫描前几行以确定该行的数字格式。

所以有人想知道设置要扫描的行数来设置数字格式。我也在R中尝试了'as.is'命令,但没有成功。

在SAS中我们可以使用proc import中的“guessingrows”命令来完成它。 R中有没有这样的命令?

谢谢, Sumanta

您好,

我附上了在excel中打开的csv格式的数据的下方屏幕截图以及在R中导入后。

CSV screenshot. 行号是2175.这里的数字在十进制之后出现。检查红框中突出显示的数字。

R import screenshot. 在excel预览中,我们可以看到小数部分,但在导入后不能显示在R中。

请注意,这里我通过ODBC导入csv,因为我可以在CSV文件上通过ODBC运行查询,这有助于仅导入所需的摘要输出。也就是说,不需要在内存中导入整个2GB csv文件,这可以节省资源。

> library(RODBC)
> con <- odbcConnect("CSV Data") # Here "CSV Data" is the connection created in the ODBC Data Source in control Panel. It is saving the path to CSV files which will act as a database location for R.
> qry <- "select * from 2013.csv"
> data <- sqlQuery(con,qry)
> odbcCloseAll()

但是当我直接使用read.csv导入文件时,我得到了正确的输出。请参见屏幕截图。Correct Output in R using read.csv

> data1 <- read.csv(file = "----file path----\\2013.csv")

问题是我不能使用read.csv,因为它需要2GB的内存空间来存储csv文件。所以我使用的是RODBC方法。

此致

Sumanta

2 个答案:

答案 0 :(得分:0)

您不应使用查看模式 as Sotos kinda allude to above检查数据。

我不知道您的数据是什么样的 - 您应该努力提供a complete minimal reproducible example来回答您的问题。我们可以使用的东西,用于向您展示如何回答您的问题 - 所以我将做一个非常简单的例子。它可以更新,看起来更像您的数据。

首先我导入一些虚拟csv,

foobar <- read.csv(text="foo,bar, cat\n1, 2, Korat\n.000000000000000001,3, Balinese")

现在,我首先使用foobar调查导入的结构str(),即

str(foobar)
#> 'data.frame':    2 obs. of  3 variables:
#>  $ foo: num  1e+00 1e-18
#>  $ bar: int  2 3
#>  $ cat: Factor w/ 2 levels " Balinese"," Korat": 2 1

在这里,您可以看到此数据是一个数字,num,向量,一个整数,int和一个因子,Factor都包含了一个由3个变量组成的数据框和2个观察结果。

接下来我会使用summary()

summary(foobar)
#>       foo            bar              cat   
#>  Min.   :0.00   Min.   :2.00    Balinese:1  
#>  1st Qu.:0.25   1st Qu.:2.25    Korat   :1  
#>  Median :0.50   Median :2.50                
#>  Mean   :0.50   Mean   :2.50                
#>  3rd Qu.:0.75   3rd Qu.:2.75                
#>  Max.   :1.00   Max.   :3.00      

最后,您可以期待像这样的单个元素

foobar[2,c('foo')]
#> [1] 1e-18

答案 1 :(得分:0)

经过多次调查后,我自己成功地解决了这个问题。因此希望分享解决方案。

创建ODBC连接后(从“控制面板”中的“ODBC数据源管理器”),选择“configure”。在“ODBC文本设置”窗口中,单击“选项”。现在点击“Define Format ...”。在新窗口“定义文本格式”中选择您关注的文件,然后将“要扫描的行”设置为ZERO。默认情况下,它设置为25.逐个选择所有数据库并将值设置为0. ZERO表示完整数据扫描以设置特定列的字符长度。

还在“列名称标题”上打勾,这将自动检测标题。

附件是屏幕截图。"Define Text Format" Screenshot

谢谢和问候,

Sumanta