如何使format()产生数字对象

时间:2013-06-25 13:21:30

标签: r format

每当我格式化表格时:

example <- sample(LETTERS, replace = T)
format(table(example), scientific = T)

数字变成了字符。如何在不诉诸format()的情况下告诉as.numeric()我的对象是数字?我在函数的帮助页面中找不到任何此类参数。它说format()对象通常是数字的,所以我想我错过了一些基本的命令。

我的真实数据如下:

> xtabs(...)
      PRU/DF      PSU/ILH      PSU/JFA      PSU/MCL      PSU/SRM      PSU/ULA 
1.040771e+01 0.000000e+00 2.280347e-01 0.000000e+00 0.000000e+00 8.186240e+00 
     PSU/URA      PSU/VGA        PU/AC        PU/AM        PU/AP        PU/BA 
0.000000e+00 1.534169e+01 8.184747e+01 1.410106e+01 1.028717e+01 1.099289e+00 
       PU/GO        PU/MA        PU/MG        PU/MT        PU/PA        PU/PI 
0.000000e+00 4.369910e+01 5.350849e+00 0.000000e+00 4.706721e-01 0.000000e+00

我想让控制台打印数字更漂亮,以便我的同事不会心脏病发作。这就是我想出来的:

> format(xtabs(...), scientific = F, digits = 1)
   PRU/DF   PSU/ILH   PSU/JFA   PSU/MCL   PSU/SRM   PSU/ULA   PSU/URA   PSU/VGA 
"10.4077" " 0.0000" " 0.2280" " 0.0000" " 0.0000" " 8.1862" " 0.0000" "15.3417" 
    PU/AC     PU/AM     PU/AP     PU/BA     PU/GO     PU/MA     PU/MG     PU/MT 
"81.8475" "14.1011" "10.2872" " 1.0993" " 0.0000" "43.6991" " 5.3508" " 0.0000" 
    PU/PA     PU/PI     PU/RO     PU/RR     PU/TO    PRU/RJ   PSU/CPS   PSU/NRI 
" 0.4707" " 0.0000" "40.6327" "10.3247" " 0.0000" "10.9644" " 0.0000" "55.4122" 

我想摆脱这些引用,以便数据在控制台上看起来更好。

4 个答案:

答案 0 :(得分:1)

格式返回字符向量,因此通常是预期的。我认为,你的问题是因为整数向量c( 1, 2, 3)的“格式”表示是"1" "2" "3",而数字的表示(真实)向量c( 1, 2, 3 )"1e+00" "2e+00" "3e+00"

请考虑以下事项:

format( 1:10 )
format( 1:10, scientific= TRUE )
format( as.numeric( 1:10 ), scientific= TRUE )

因此,请尝试

format( as.numeric( table( example ) ), scientific= TRUE )

不幸的是,你不能省略as.numeric,因为table生成整数值,你需要真实。

答案 1 :(得分:1)

format函数返回字符向量,其数字现在按照您的规范“格式化”。如果将结果转换回数字,则现在任何格式都将丢失。我认为你的问题可能是创建格式化输出和打印格式化输出之间的区别。当您创建一个对象但不对其执行任何操作时,将使用默认参数自动打印该对象,其中一个默认设置是在字符串周围添加引号。如果您不想要引号,那么只需自己致电print并告诉它不要包含引号:

> example <- sample(LETTERS, replace = T)
> print(format(table(example), scientific = T), quote=FALSE)
example
B E F G H J K L Q S T U W X Z 
1 1 1 2 1 2 3 1 1 1 3 1 1 5 2 

如果您的主要目标是不使用科学记数法,那么您应该查看zapsmall函数,该函数将极小的值(通常是切换到科学记数法的罪魁祸首)转换为零。或者options(scipen=5)(或除5以外的其他值),这将降低在后续打印中切换到科学记数法的可能性。

答案 2 :(得分:0)

根据您对@ January的答案的评论,您似乎只是在寻找c(table(example))

答案 3 :(得分:0)

这是我找到的解决方案:

View(format(xtabs(...), scientific = F, digits = 1))

该表将出现在另一个窗口而不是控制台内部,就像我原本想要的那样,但它解决了我快速显示漂亮数据而不诉诸长命令的问题。欢迎更优雅的解决方案!