我正在读取一个大约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
答案 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