cut function in R- labeling without scientific notations for use in ggplot2

11,566

Use argument dig.lab in cut function:

a<-c(1,10,100,1000,100000,1000000)
b<-cut(a, 
breaks=data.frame(
  classIntervals(
    a,n=3,method="quantile")[2])[,1],
include.lowest=T,dig.lab=10) ##Number of digits used
b
[1] [1,70]          [1,70]          (70,34000]      (70,34000]     
[5] (34000,1000000] (34000,1000000]
Levels: [1,70] (70,34000] (34000,1000000]
Share:
11,566
Joschi
Author by

Joschi

Updated on June 12, 2022

Comments

  • Joschi
    Joschi almost 2 years

    I use cut and classIntervals to group data in R which I later plot with ggplot2. So a basic operation cutting by quantiles with n=3 would look like this:

    library(classInt)
    
    a<-c(1,10,100,1000,100000,1000000)
    b<-cut(a, 
    breaks=data.frame(
      classIntervals(
        a,n=3,method="quantile")[2])[,1],
    include.lowest=T)
    

    where b would be:

    [1] [1,70]          [1,70]          (70,3.4e+04]    (70,3.4e+04]    (3.4e+04,1e+06] (3.4e+04,1e+06]
    Levels: [1,70] (70,3.4e+04] (3.4e+04,1e+06]
    

    so the first line of this output is a vector with my grouped data which I can use in ggplot2. But rather than having this vector in scientific notation I would like the labels to be [1,70] (70,34000] (3400,1000000]

    How can I achive that?Any help would be appreciated, also if you have other methods rather than cut and classInt to achive the same result.

  • novice
    novice almost 8 years
    @Jouni Helske -- What would you propose if number is something like 10^-17?
  • sparc_spread
    sparc_spread over 4 years
    I'm in a somewhat similar situation as the OP. I'm running different quantities through a function that uses cut, and I occasionally see scientific notation in the labels, even for quantities that are integer. If I never want to see scientific notation, regardless of the quantities involved, is it safe for me to just set dig.lab=50 (the maximum value allowed)? Thx!
  • Ratnanil
    Ratnanil about 2 years
    why is the input to breaks wrapped in a data.frame? b<-cut(a, breaks= classIntervals(a,n=3,method="quantile")[[2]], include.lowest=T,dig.lab=10) would do.