R data.table fwrite to fread space delimiter and emptys
区切り文字として「」を使用し、空白値を散在させたフレッドを使用すると問題が発生します。たとえば、これは次のとおりです。
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
フレッドは次のように失敗します:「4行目で早期に停止しました。3つのフィールドが必要ですが、2つ見つかりました。」問題は、中央の列にNA値がある場合、fwriteがvalue | space | space | valueを与え、freadが中央の暗黙の空白値を認識しないことであるように思われます。
そもそも別の区切り文字を使用するのは簡単だと理解しています。しかし、ここで元のdtを再現するために恐怖を感じることは可能ですか?
読み取り側のソリューションで編集:
私はここで同じ質問を見つけました。それは解決策を与えるので少し混乱しますが、その後解決策は機能しなくなりました。fread()を使用した読み取り側のソリューションに最も近い他のリードを追求する場合、次のようなUnixコマンドを使用します。
dt <- fread(cmd="wsl sed -r 's/ /,/g' dt.csv") #converts spaces to commas on the way in
Windows 10では、システムでUnixコマンドを実行するために、試行錯誤を繰り返す必要がありました。「wsl」の部分はシステムに依存しているようです。このビデオは役に立ちました、そして私は彼がそこで説明する最初の方法を使いました。これとこの質問は、sed withfreadについてもう少し詳しく説明しています。後者は、sedにはrToolsが付属していると言っていますが、私はそれを試していません。
回答
1 Billy34
たぶんデフォルト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