R数据.表转发到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给出值|space|space|value,然后fread无法识别在中间的隐含空白值。

我知道首先使用另一个分隔符会很简单。然而,有可能让fread在这里复制原始dt吗?

使用可读解决方案编辑

我在这里发现了同样的问题。这有点令人困惑,因为它给出了一个解决方案,但后来解决方案停止了工作。在寻找其他线索时,我现在发现最接近fread((的读取端解决方案是使用如下Unix命令:

dt <- fread(cmd="wsl sed -r 's/ /,/g' dt.csv") #converts spaces to commas on the way in

在Windows10上,我不得不做一些尝试和错误,以使我的系统运行Unix命令。";wsl";部分似乎取决于系统。这个视频很有帮助,我使用了他描述的第一种方法。这个和这个问题提供了更多关于使用fread的sed的信息。后者说sed带有rTools,尽管我没有尝试。

默认情况下,可能将NA导出为""以外的内容

这里我使用@

library(data.table)
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 = " ", na="@") #save to file
dt <- fread("dt.csv", sep = " ",na.strings = "@") #try to retrieve

最新更新