带有小数但不显示的数字列

问题描述 投票:1回答:3

我遇到一种我不理解的奇怪行为。这是一个例子:

plouf <- read.table(text = "id  ttt_course  generic_name
1011010001.1    1   etanercept
           1011010001.2 1   etanercept
           1011010001.3 1   etanercept
           1011010001.4 1   etanercept
           1011010001.5 1   etanercept
           1011010001.6 1   etanercept
           1011010001.7 1   etanercept
           ",header = T)

id列是奇怪的。

> class(plouf$id)
[1] "numeric"

所以它是数字,但是当我显示它时:

          id ttt_course generic_name
1 1011010001          1   etanercept
2 1011010001          1   etanercept
3 1011010001          1   etanercept
4 1011010001          1   etanercept
5 1011010002          1   etanercept
6 1011010002          1   etanercept
7 1011010002          1   etanercept

它显示它的舍入值。它的水平也很奇怪:

> unique(plouf$id)
[1] 1011010001 1011010001 1011010001 1011010001 1011010002 1011010002 1011010002

我当然可以强行打印:

> formatC(plouf$id,format="f",digits=1)
[1] "1011010001.1" "1011010001.2" "1011010001.3" "1011010001.4" "1011010001.5" "1011010001.6" "1011010001.7"

这种行为的原因是什么?我怎么能避免呢?

r dataframe
3个回答
2
投票

查看数据框打印方法的文档:

?print.dataframe
## S3 method for class 'data.frame'
print(x, ..., digits = NULL,
      quote = FALSE, right = TRUE, row.names = TRUE)

当您输入plouf时,因为它是一个数据框,所以这是将数据框打印到控制台的方法,其中digits = NULL。

它有三种方式:

  1. 强迫它(正如你的建议,以及@Florian建议)
  2. 使用不同的打印方法定义不同类的对象。
  3. 设置数字的全局选项,例如options(digits = 14)

就个人而言,我尽量避免设置不同的选项,因为如果您看到非标准输出,则会更难与他人协作。


2
投票

您可以将digits选项设置为大于10的值:

> options(digits=14)
> plouf
            id ttt_course generic_name
1 1011010001.1          1   etanercept
2 1011010001.2          1   etanercept
3 1011010001.3          1   etanercept
4 1011010001.4          1   etanercept
5 1011010001.5          1   etanercept
6 1011010001.6          1   etanercept
7 1011010001.7          1   etanercept

希望这可以帮助。


0
投票

如果您不想更改options设置,而只是打印带有小数位的数据框,正如Dan Hall建议的那样,print函数具有正确的位数:

print(plouf, digits = 11)

输出:

           id ttt_course generic_name
1 1011010001.1          1   etanercept
2 1011010001.2          1   etanercept
3 1011010001.3          1   etanercept
4 1011010001.4          1   etanercept
5 1011010001.5          1   etanercept
6 1011010001.6          1   etanercept
7 1011010001.7          1   etanercept
© www.soinside.com 2019 - 2024. All rights reserved.