1

我有一个矩阵,其中包含一些NA我想格式化然后写入 CSV 文件的矩阵,将每个矩阵替换NA为两个破折号。但是,所有的NAget 转换为字符formatwrite.csv然后无法检测和替换它们。

在阅读了 的帮助文件后format,设置 na.encode=FALSE似乎是合乎逻辑的事情,但这并没有解决问题。我也用谷歌和这个网站搜索过其他有这个问题的人,但找不到任何人。这似乎应该有一个简单的答案,让我把头撞在墙上。

我的代码的一个最小示例如下所示:

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="--")

我正在使用 R 2.15.1。这样做的正确方法是什么?

编辑:谁能解释为什么这甚至需要解决方法?

4

2 回答 2

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 回答
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 回答