我在使用fread函数时遇到了问题,主要是针对空格作为分隔符且会有连续的空值情况。例如:
dt <- data.table(1:5,1:5,1:5) #make a simple table
dt[3,"V2" := NA] #add a blank in the middle to illustrate the problem
fwrite(dt, file = "dt.csv", sep = " ") #save to file
dt <- fread("dt.csv", sep = " ") #try to retrieve
fread出现错误:"第4行提前停止。期望3个字段,但只找到了2个。" 问题似乎在于中间列中有NA值,fwrite将给出value|space|space|value的结果,然后fread无法识别中间的隐含空白值。
我知道一开始使用另一个分隔符可能更简单。但是,有没有可能让fread还原原始数据表? 带读取侧解决方案的编辑: 我在这里找到了相同的问题here。虽然它提供了一个解决方案,但后来却出现了问题。在追寻其他线索时,我现在发现使用类似Unix命令的fread()的最接近的读取侧解决方案是:
dt <- fread(cmd="wsl sed -r 's/ /,/g' dt.csv") #converts spaces to commas on the way in
在Windows 10系统上,我不得不进行一些尝试和错误才能运行Unix命令。 "wsl" 部分似乎取决于系统。 这个视频很有帮助,我使用了他在那里描述的第一种方法。 这个问题和这个问题提供了更多关于使用fread和sed的信息。 后者说sed随rTools而来,但我没有尝试过。