更改数据框,以便数千由点分隔

时间:2013-08-26 10:17:18

标签: r knitr pandoc decimal

目前,我正在与RMarkdown和Pandoc合作。我在R中的data.frames看起来像这样:

3.538e+01 3.542e+01 3.540e+01
9.583e+00 9.406e+00 9.494e+00
2.601e+05 2.712e+05 5.313e+05

运行pandoc后,结果如下:

35.380 35.420 35.400
9.583 9.406 9.494
260116.000 271217.000 531333.000

它应该是什么样的:

35,380 35,420 35,400
9,583  9,406  9,494
260.116 271.217 531.333

所以我想要逗号代替点而不想在260116(千位数字)之后没有逗号或点。将千分开的点数会很好。有没有办法直接更改R中的外观或我是否必须在knitr / markdown中设置选项?

由于

2 个答案:

答案 0 :(得分:5)

以下是可以使用format()进行的部分转化的示例:

x <- c(35.38, 35.42, 35.4, 9.583, 9.406, 9.494, 260100, 271200, 531300)
format(x, decimal.mark=",", big.mark=".", scientific=FALSE)
# [1] "     35,380" "     35,420" "     35,400" "      9,583" "      9,406"
# [6] "      9,494" "260.100,000" "271.200,000" "531.300,000"

还有其他几个选项,例如trimjustify等,可能会让您的输出为pandoc做好准备。

答案 1 :(得分:1)

由于这个问题非常鼓舞人心,我recently在我的pander包中引入了big.mark功能,可以使用预定义的选项从R对象返回markdown格式的表 - 构建在format上顺便说说。小演示:

  1. 加载程序包(installed from GH,直到此功能进入CRAN):

    > library(pander)
    
  2. 制作演示data.frame

    > x <- matrix(c(35.38, 35.42, 35.4, 9.583, 9.406, 9.494, 260100, 271200, 531300), 3, byrow = TRUE)
    
  3. 设置默认选项:(可能需要切换US上下文的值)

    > panderOptions('decimal.mark', ',')
    > panderOptions('big.mark', '.')
    
  4. pander完成其余工作:

    > pander(x)
    
    ------- ------- -------
     35,38   35,42   35,4  
    
     9,583   9,406   9,494 
    
    260.100 271.200 531.300
    ------- ------- -------
    
  5. 您可以在那里找到并使用更多选项(例如表格的降价语法)。