繁体   English   中英

read.table读取数字作为因素

[英]read.table reads numbers as factors

我有以下示例文件:

"id";"PCA0";"PCA1";"PCA2"
1;6.142741644872954;1.2075898020608253;1.8946959360032403   
2;-0.5329026419681557;-8.586870627925729;4.510113575138726

当我尝试阅读时:

d <- read.table("file.csv", sep=";", header=T)

id是整数列, PCA0是数字,所有后续列都是因子

class(d$iid)
[1] "integer"
class(d$PCA0)
[1] "numeric"
class(d$PCA1)
[1] "factor"
class(d$PCA2)
[1] "factor"

为什么其他列也不是数字?

我知道如何转换列,但我希望我的脚本能够在不手动转换类型的情况下工作。 为什么R不识别数字列?

正如@MrFlick所说:数字太多了。

你可以通过指定colClasses参数强制你想要的colClasses

read.table("test.csv",
                sep=";",
                header=TRUE,
                colClasses=c("integer","numeric","numeric","numeric"))

如果你真的需要尽可能多的精度:

require(data.table)
d <- fread("test.csv")

然后修改为存储的最大精度:

d[,PCA0 := sprintf("%.15E",PCA0)]
d[,PCA1 := sprintf("%.15E",PCA1)]
d[,PCA2 := sprintf("%.15E",PCA2)]

得到:

> d
   id                   PCA0                   PCA1                  PCA2
1:  1  6.142741644872954E+00  1.207589802060825E+00    1.8946959360032403   
2:  2 -5.329026419681557E-01 -8.586870627925729E+00     4.510113575138726

注意: fread应该更快+更快。

这是R 3.1的变化。 关于此问题的R-devel列表已经有很多讨论 基本上,如果一个数字有太多的数字,它就会被转换为一个因子。 在3.1.1中可以恢复此行为,但据我所知,没有设置发布日期。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM