nig*_*tar 13 r data.table
假设我有这个txt文件:
"AA",3,3,3,3
"CC","ad",2,2,2,2,2
"ZZ",2
"AA",3,3,3,3
"CC","ad",2,2,2,2,2
Run Code Online (Sandbox Code Playgroud)
随read.csv
我可以:
> read.csv("linktofile.txt", fill=T, header=F)
V1 V2 V3 V4 V5 V6 V7
1 AA 3 3 3 3 NA NA
2 CC ad 2 2 2 2 2
3 ZZ 2 NA NA NA NA NA
4 AA 3 3 3 3 NA NA
5 CC ad 2 2 2 2 2
Run Code Online (Sandbox Code Playgroud)
但是fread
给出了
> library(data.table)
> fread("linktofile.txt")
V1 V2 V3 V4 V5 V6 V7
1: CC ad 2 2 2 2 2
Run Code Online (Sandbox Code Playgroud)
我能得到相同的结果fread
吗?
看起来发展计划fread
有所改变,fread
现在已经获得了fill
争论.
使用本答案末尾的相同样本数据,这是我得到的:
library(data.table)
packageVersion("data.table")
# [1] ‘1.9.7’
fread(x, fill = TRUE)
# V1 V2 V3 V4 V5 V6 V7
# 1: AA 3 3 3 3 NA NA
# 2: CC ad 2 2 2 2 2
# 3: ZZ 2 NA NA NA NA NA
# 4: AA 3 3 3 3 NA NA
# 5: CC ad 2 2 2 2 2
Run Code Online (Sandbox Code Playgroud)
使用以下命令安装"data.table"的开发版本:
install.packages("data.table",
repos = "https://Rdatatable.github.io/data.table",
type = "source")
Run Code Online (Sandbox Code Playgroud)
这不能回答你的问题fread
:@Matt已经解决了这个问题.
但是,它确实为您提供了一种替代方案,可以考虑为您提供比基本R更快的速度改进read.csv
.
与此不同的是fread
,您必须通过向他们提供有关您尝试阅读的数据的一些信息来帮助解决这些问题.
您可以使用input.file
"iotools"中的功能.通过指定列类型,您可以告诉formatter函数需要多少列.
library(iotools)
input.file(x, formatter = dstrsplit, sep = ",",
col_types = rep("character", max(count.fields(x, ","))))
Run Code Online (Sandbox Code Playgroud)
x <- tempfile()
myvec <- c('"AA",3,3,3,3', '"CC","ad",2,2,2,2,2', '"ZZ",2', '"AA",3,3,3,3', '"CC","ad",2,2,2,2,2')
cat(myvec, file = x, sep = "\n")
## Uncomment for bigger sample data
## cat(rep(myvec, 200000), file = x, sep = "\n")
Run Code Online (Sandbox Code Playgroud)