R - 具有固定精度的write.csv

时间:2015-03-30 17:37:55

标签: r precision

是否可以在write.csv中修正数字精度,比如2位小数?如果是,在这种情况下是否可以存储没有.00的整数? 谢谢!

1 个答案:

答案 0 :(得分:5)

不在write.csvwrite.table本身。从帮助文档(?write.table):

  

几乎在所有情况下,数字量的转换都是        由选项"" scipen"' (参见'选项'),但有了        内部相当于' digits = 15'。为了更好的控制,请使用        '格式'制作字符矩阵/数据框,然后调用        ' write.table'在那。

你最好做的是使用format自己格式化列,ala:

set.seed(42)
df1 <- data.frame(x = runif(10), y = sample(10))
df1$x <- round(df1$x, digits = 2)
write.csv(df1, ...)

<强> 修改

要在屏幕上进行漂亮打印,只需使用options(digits = 2)并再次转储data.frame即可。我猜你想要漂亮地打印到CSV中,所以......

使用以下功能:

dfDigits <- function(x, digits = 2) {
    ## x is a data.frame
    for (col in colnames(x)[sapply(x, class) == 'numeric'])
        x[,col] <- round(x[,col], digits = digits)
    x
}
set.seed(42)
df1 <- data.frame(x=runif(5),y=sample(5))
head(df1)
##              x y
## 1 0.9148060435 3
## 2 0.9370754133 5
## 3 0.2861395348 1
## 4 0.8304476261 2
## 5 0.6417455189 4
head(dfDigits(df1, 2))
##      x y
## 1 0.91 3
## 2 0.94 5
## 3 0.29 1
## 4 0.83 2
## 5 0.64 4