在write.csv中控制R中的数字

Qua*_*ner 2 csv r

我想将数据帧写入csv,其中包含数字列和字符列.

一些数字列是整数,我想显示为整数,有些是小数,我需要控制十进制后的位数,显然字符列没有变化

我怎样才能做到这一点?Eq该数据帧中的特定行是

XYZ  8200  0.306060606 ABC
Run Code Online (Sandbox Code Playgroud)

输出应该是

XYZ 8200 0.30 ABC
Run Code Online (Sandbox Code Playgroud)

问候

Jot*_*ota 5

这将强制小数位后的两位数:

# read in some sample data
xyz <- data.frame(v1 = c("a", "b"), 
                  v2 = c(8200, 8100), 
                  v3 = c(365.2121, 365.2122), 
                  v4 = c(0.3060, 0.3260))

format(xyz, digits=2, nsmall=2)
#  v1      v2     v3   v4
#1  a 8200.00 365.21 0.31
#2  b 8100.00 365.21 0.33
Run Code Online (Sandbox Code Playgroud)

如果您不希望具有整数的列也具有这些小数位(例如v2,此示例中的列),您可以执行类似拆分xyz为需要格式化的列和其他列的操作:

numbs2format <- 
    xyz[, (sapply(xyz, function(x) isTRUE(sum(x %% 1) > 0)))]
# ignore the warnings from trying to use %% on non-numerics
other.columns <- 
    xyz[, (sapply(xyz, function(x) !isTRUE(sum(x %% 1) > 0)))]

cbind(other.columns, format(numbs2format, digits=2, nsmall=2))
#  v1   v2     v3   v4
#1  a 8200 365.21 0.31
#2  b 8100 365.21 0.33
Run Code Online (Sandbox Code Playgroud)