代码之家  ›  专栏  ›  技术社区  ›  TheCodeNovice

R中符号格式的尾随零和其他问题[重复]

  •  0
  • TheCodeNovice  · 技术社区  · 3 月前

    我需要一个咨询,以获得一种更稳健的方法,将一串数字(以及潜在的NA或其他非数字条目)格式化为整洁的sig-fig格式。我想知道是否有一种优雅的方式来处理小数字,比如0.00435和大数字,比如23345,并将其转换为整洁的输出格式,其中大数字得到逗号,小数字具有正确数量的符号。

    下面是我的尝试

        num_of_sig_figs = 3
        a = c(0.3459215,0.6227059,7.409618,462.3468600,9.090436,6293.4189000)
          
        a_sigfig <- format(round(a,num_of_sig_figs-(1+as.integer(log10(abs(a))))), big.mark=",")
        a_sigfig
    
        # "    0.35" "    0.62" "    7.41" "      NA" "  462.00" "    9.09" "6,290.00"
    

    我在带有正确数量的sigfigs的较大数字上得到了尾随零,但我的较小数字缺少一个sigfigs。有没有一种方法可以在没有几个案例的情况下做到这一点?

    此外,如果不必放弃数字格式,那将是一件好事。

    请注意,此问题与之前提出的问题的区别在于,大数字中包含了“,”,如果需要,在后续处理中保持数字格式

    1 回复  |  直到 3 月前
        1
  •  1
  •   Tim G    3 月前

    需求1

    一种更稳健的方法来格式化一串数字(和潜在数字) NA或其他非数字条目)转换为整洁的符号图格式

    需求2

    此外,不用丢失数字也会很好 格式。

    bigmark=“,”使得很难满足需求2。没有它,你可以做类似的事情 this

    sigfig <- function(x, dig = 3){
      x <- suppressWarnings(as.numeric(x))
      suppressWarnings(as.numeric(formatC(signif(x,digits=dig), digits=dig, format="fg", flag="#")))
    }
    
    sigfig(c(0.3459215,NA,"test",462.3468600,9.090436,6293.4189000))
    
    [1]    0.346       NA       NA  462.000    9.090 6290.000
    

    满足需求1,但丢失了数字类型

    sigfig_char <- function(x, dig = 3){
      x <- suppressWarnings(as.numeric(x))
      gsub("\\.$", "", formatC(signif(x,digits=dig), digits=dig, format="fg", flag="#", big.mark = ","))
    }
    
    sigfig_char(c(0.3459215,NA,"test",462.3468600,9.090436,6293.4189000))
    [1] "0.346" "  NA"  "  NA"  "462"   "9.09"  "6,290"