1

フォーマットしてからCSVファイルに書き込み、それぞれを2つのダッシュNAに置き換えたいマトリックスがあります。NAただし、すべてのNAgetはによって文字に変換されformatwrite.csvそれらの検出と置換に失敗します。

のヘルプファイルを読んだ後format、設定 na.encode=FALSEは論理的なことのように見えましたが、それでも問題は解決しませんでした。また、Googleやこのサイトでこの問題を抱えている他の人を検索しましたが、見つかりませんでした。これは簡単な答えがあるはずで、壁に頭をぶつけているようです。

私のコードの最小限の例は次のようになります。

data = matrix(c(pi, NA, pi*100, NA), 2, 2)
data.f = format(data, digits=4, nsmall=2)
write.csv(data.f, file="data.csv", na="--")

R2.15.1を使用しています。これを行う正しい方法は何ですか?

編集:これが回避策を必要とする理由を誰かが説明できますか?

4

2 に答える 2

2

考えられる回避策は次のとおりです

data = matrix(c(pi, NA, pi*100, NA), 2, 2)
data.f = format(data, digits=4, nsmall=2)
data.f <- replace(data.f, which(data.f == "     NA"), "--")
write.csv(data.f, file="data.csv")
于 2012-10-23T09:05:09.980 に答える
2

もっとオーソドックスな方法もあるかもしれませんが!is.na()format()段階でNA値が文字に変換されないようにするために使用できるかもしれません。

結果の CSV と一緒に最小限の例を次に示します。

set.seed(1)
data <- matrix(rnorm(20), ncol=5)
data[sample(length(data), 5)] <- NA
data.f <- data
data.f[!is.na(data.f)] <- format(data.f[!is.na(data.f)], digits = 4, nsmall = 2)
write.csv(data.f, file = "data.csv", na = "--")
dput(write.csv(data.f, na = "--"))
# "","V1","V2","V3","V4","V5"
# "1","-0.62645"," 0.32951",--,--,--
# "2"," 0.18364","-0.82047",--,"-2.21470"," 0.94384"
# "3","-0.83563"," 0.48743"," 1.51178",--," 0.82122"
# "4"," 1.59528"," 0.73832"," 0.38984","-0.04493"," 0.59390"
# NULL
于 2012-10-23T09:02:11.820 に答える