【问题标题】:How to set ',' as decimal separator with R如何使用 R 将“,”设置为小数分隔符
【发布时间】:2013-04-29 09:17:51
【问题描述】:

即使我的 Windows 7 区域设置指定使用“,”作为小数分隔符,R 和 RStudio 还是给了我一个“。”分隔器。有什么办法可以改变这个吗?请注意以下语言环境中的“LC_NUMERIC=C”设置:这似乎是由 R 或 RStudio 强制执行的。

由于我正在进行一个漫长的项目,我不愿意立即更改为 R 3.0 和最后一个 RStudio 版本。有人知道这些版本中的小数分隔符问题有什么变化吗?

我正在使用 prettyNum 来解决单个数字的问题,但我不知道如何在表格上使用它。

会话信息() R 版本 2.15.3 (2013-03-01) 平台:x86_64-w64-mingw32/x64(64位)

locale:
[1] LC_COLLATE=Spanish_Argentina.1252  LC_CTYPE=Spanish_Argentina.1252   
[3] LC_MONETARY=Spanish_Argentina.1252 LC_NUMERIC=C                      
[5] LC_TIME=Spanish_Argentina.1252    

attached base packages:
[1] grid      splines   stats     graphics  grDevices utils     datasets  methods  
[9] base     

other attached packages:
 [1] ascii_2.1          randomForest_4.6-7 pander_0.3.3       fpc_2.1-5         
 [5] flexmix_2.3-10     mclust_4.0         cluster_1.14.3     MASS_7.3-23       
 [9] Gmisc_0.5.0.0      testthat_0.7       boot_1.3-7         rms_3.6-3         
[13] miscTools_0.6-16   stringr_0.6.2      Hmisc_3.10-1       survival_2.37-2   
[17] lattice_0.20-13    xtable_1.7-1       pixmap_0.4-11      RColorBrewer_1.0-5
[21] ade4_1.5-1        

loaded via a namespace (and not attached):
[1] digest_0.6.3      evaluate_0.4.3    modeltools_0.2-19 stats4_2.15.3    
[5] tools_2.15.3  

【问题讨论】:

  • 你指的是哪个“表”?你是如何创建它的?

标签: r separator


【解决方案1】:

read.tablewrite.table 函数(以及它们的大多数表亲)使用的小数分隔符由“dec”参数设置。 read.csv2 是一种特殊情况,dec 的默认值为“,”,字段分隔符(“sep”)设置为“;”。

可以更改 R 打印、绘图和 as.character 函数的操作的输出。您将其从默认值更改为:

 options(OutDec= ",")   # read ?options
 print( pi )
 #[1] 3,141593
 options(OutDec= ",")  # restore default value

这不会导致 R 以不同方式处理来自控制台的数字输入。这被硬编码为“。”作为小数点分隔符。

如果您将文本函数应用于表格对象,您可能会从“数字”模式强制转换为“字符”模式,因为 R 中的表格对象继承自“矩阵”类。

应该补充一点,使用“欧式”小数分隔符读取数据的“自然”方式是使用read.delim。它不仅将小数点分隔符更改为“,”,而且同时将一些参数更改为 read.table 或 read.csv 的默认值以外的其他参数:

sep = "\t", quote = "\"", dec = ".", fill = TRUE, comment.char = ""

【讨论】:

  • 太棒了!!这比第一个答案要好,我在某些表格中遇到问题...可以更改“已回答”标记吗?
  • 这没有任何效果,我不得不更改我的语言环境以使用 Sys.setlocale("LC_NUMERIC","C") 打印数字(我使用的是 linux)
  • @jena 似乎您正在处理 R 控制台以外的其他东西的输出。据我所知,R 控制台在不同地区是完全一致的。
  • @42- 我的绘图有问题。从help(options) 我了解到这应该有效,但它没有。编辑:实际上没有,在控制台中也没有效果(我使用 SublimeREPL 插件用于 Sublime-Text)。
  • @jena :我不知道正在使用什么代码,所以说“绘图问题”除了说图形设备的接口通常是操作系统和设备特定的之外,不允许任何具体的建议。对于具体答案,您可能需要使用minimal reproducible example 发布问题
【解决方案2】:

为什么要使用“,”作为小数分隔符,在这种情况下,R 将如何解释这个 R 表达式

x <- c(2,3) # (two vectors or one). 

所以,我假设您只想覆盖默认的小数分隔符来打印输出,在这种情况下,我认为 prettyNum 是正确的工具。

require(plyr)
head(numcolwise(prettyNum)(iris, dec = ","))

##   Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1          5,1         3,5          1,4         0,2
## 2          4,9           3          1,4         0,2
## 3          4,7         3,2          1,3         0,2
## 4          4,6         3,1          1,5         0,2
## 5            5         3,6          1,4         0,2
## 6          5,4         3,9          1,7         0,4

【讨论】:

  • 是的,我只需要它来输出。我以前从未使用过 plyr,也不知道 numcolwise 函数。谢谢!
  • @dickoa。那是欧洲的惯例。 dec 参数仅用于文本文件的输入和输出。正如您所注意到的,在 R 中没有更改值和小数分隔符的选项,但这并不是 OP 的真正问题。
【解决方案3】:

据我从blog comment where you referenced this question 所见,基于您想将它与(Pandoc)降价一起使用的事实,我还建议您尝试一下我的pander package

> library(pander)
> panderOptions('decimal.mark', ',')
> panderOptions('table.split.table', Inf)
> pander(head(iris))

-------------------------------------------------------------------
 Sepal.Length   Sepal.Width   Petal.Length   Petal.Width   Species 
-------------- ------------- -------------- ------------- ---------
     5,1            3,5           1,4            0,2       setosa  

     4,9             3            1,4            0,2       setosa  

     4,7            3,2           1,3            0,2       setosa  

     4,6            3,1           1,5            0,2       setosa  

      5             3,6           1,4            0,2       setosa  

     5,4            3,9           1,7            0,4       setosa  
-------------------------------------------------------------------

或 PHP Markdown Extra 语法以便于使用 knitr:

> pandoc.table(head(iris), style = 'rmarkdown')


|  Sepal.Length  |  Sepal.Width  |  Petal.Length  |  Petal.Width  |  Species  |
|:--------------:|:-------------:|:--------------:|:-------------:|:---------:|
|      5,1       |      3,5      |      1,4       |      0,2      |  setosa   |
|      4,9       |       3       |      1,4       |      0,2      |  setosa   |
|      4,7       |      3,2      |      1,3       |      0,2      |  setosa   |
|      4,6       |      3,1      |      1,5       |      0,2      |  setosa   |
|       5        |      3,6      |      1,4       |      0,2      |  setosa   |
|      5,4       |      3,9      |      1,7       |      0,4      |  setosa   |

【讨论】:

    猜你喜欢
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多