【发布时间】:2011-12-05 06:43:40
【问题描述】:
今天我终于决定开始攀登 R 陡峭的学习曲线。我花了几个小时,我设法导入我的数据集并做一些其他基本的事情,但我遇到了数据类型的问题:包含小数的列被导入为整数,转换为双精度价值观。
在尝试获取一个小的 csv 文件作为示例时,我发现 只有当数据文件太大时才会出现问题(我的原始文件是 1048418 x 12 矩阵,但是即使“只有”5000 行我也有同样的问题。当我只有 100、1000 甚至 2000 行时,该列被正确导入为双精度)。
Here 是一个较小的数据集(仍然是 500kb,但同样,如果数据集很小,问题就不会被复制)。代码是
> ex <- read.csv("exampleshort.csv",header=TRUE)
> typeof(ex$RET)
[1] "integer"
为什么当文件很大时,返回的列被导入为整数,而它显然是双精度类型?
最糟糕的是,如果我尝试将其转换为双精度值,则会更改值
> exdouble <- as.double(ex$RET)
> typeof(exdouble)
[1] "double"
> ex$RET[1:5]
[1] 0.005587 -0.005556 -0.005587 0.005618 -0.001862
2077 Levels: -0.000413 -0.000532 -0.001082 -0.001199 -0.0012 -0.001285 -0.001337 -0.001351 -0.001357 -0.001481 -0.001486 -0.001488 ... 0.309524
> exdouble[1:5]
[1] 1305 321 322 1307 41
这不是唯一导入错误的列,但我想如果我找到一个列的解决方案,我应该能够对其他列进行排序。以下是更多信息:
> sapply(ex,class)
PERMNO DATE COMNAM SICCD PRC RET RETX SHROUT VWRETD VWRETX EWRETD EWRETX
"integer" "integer" "factor" "integer" "factor" "factor" "factor" "integer" "numeric" "numeric" "numeric" "numeric"
它们的顺序应该是:整数、日期、字符串、整数、双精度、双精度、双精度、整数、双精度、双精度、双精度、双精度(类型可能是错误的,但希望您能明白我的意思)
【问题讨论】:
-
@Xu Wang:上半场不行。将其减少到前 5000 次观察,不到我数据的 1%,已经产生了问题......
-
很抱歉我没有完成我的评论,因为我去阅读了
read.csv帮助。我想说的是,我认为可能有一些奇怪的值让R感到困惑。所以我认为这不是大小的事实,而是大型数据集具有那些令人困惑的字符或值之一。那有意义吗?如果没有,那也没关系。我认为解决方案是使用 colClasses 参数。 -
@Xu Wang 我明白你在说什么,但我仍然不太确定如何解决我的问题。如何使用 colClasses 参数?您能否给我一行命令以使用 colClasses 参数正确导入此文件?
-
相信我们可以解决这个问题!请在答案中查看我的评论。我需要你提供一些其他信息。
标签: r