我有以下示例文件:
"id";"PCA0";"PCA1";"PCA2"
1;6.142741644872954;1.2075898020608253;1.8946959360032403
2;-0.5329026419681557;-8.586870627925729;4.510113575138726
Run Code Online (Sandbox Code Playgroud)
当我尝试阅读时:
d <- read.table("file.csv", sep=";", header=T)
Run Code Online (Sandbox Code Playgroud)
id是一个整数列,PCA0一个数字,所有后续列都是因子
class(d$iid)
[1] "integer"
class(d$PCA0)
[1] "numeric"
class(d$PCA1)
[1] "factor"
class(d$PCA2)
[1] "factor"
Run Code Online (Sandbox Code Playgroud)
为什么其他列也不是数字?
我知道如何转换列,但我希望我的脚本能够在不手动转换类型的情况下工作.为什么R不识别数字列?
npj*_*pjc 10
正如@MrFlick所说:数字太多了.
你可以通过指定colClasses参数强制你想要的东西:
read.table("test.csv",
sep=";",
header=TRUE,
colClasses=c("integer","numeric","numeric","numeric"))
Run Code Online (Sandbox Code Playgroud)
require(data.table)
d <- fread("test.csv")
Run Code Online (Sandbox Code Playgroud)
然后修改为存储的最大精度:
d[,PCA0 := sprintf("%.15E",PCA0)]
d[,PCA1 := sprintf("%.15E",PCA1)]
d[,PCA2 := sprintf("%.15E",PCA2)]
Run Code Online (Sandbox Code Playgroud)
得到:
> 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
Run Code Online (Sandbox Code Playgroud)
注意:fread应该更快+更快.