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

时间:2018-03-05 09:48:33

标签: r dataframe

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

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"

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

3 个答案:

答案 0 :(得分: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

希望这有帮助。

答案 1 :(得分: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)
  4. 就个人而言,我尽量避免设置不同的选项,因为如果您看到非标准输出,则会更难与他人协作。

答案 2 :(得分: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