【问题标题】:Controlling digits in R in write.csv在 write.csv 中控制 R 中的数字
【发布时间】:2015-07-28 19:00:23
【问题描述】:

我想将一个数据框写入 csv,其中包含数字列和字符列。

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

我该怎么做? Eq 该数据框中的特定行是

XYZ  8200  0.306060606 ABC

输出应该是

XYZ 8200 0.30 ABC

问候

【问题讨论】:

标签: r csv


【解决方案1】:

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

# 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

如果您不希望包含整数的列也有这些小数位(例如,此示例中的列 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

【讨论】:

  • 你好,但是整数 8200 显示为我不想要的 8200.00
  • 您好,这是正确的,但我也可以使用as.integer() 来保持整数列的原样。我在write.csv() 中寻找答案,无论它是否直接可用。也就是说,我错过了什么。数据修改始终是一个打开的选项
  • 但是我仍然赞成这个解决方案比as.integer()更通用
  • @QuantLearner 据我所知,write.csv 没有任何论据可以让您实现这样的目标。所以我回答了如何以适当的格式提供write.csv 的东西。如果您有更喜欢使用as.integer 的方法,请随时将其作为答案发布,如果您愿意,甚至可以接受。
猜你喜欢
  • 2013-04-23
  • 1970-01-01
  • 2015-02-10
  • 2019-04-24
  • 1970-01-01
  • 2013-07-20
  • 2021-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多