Search code examples
rdecimallimitmaxlength

Limiting the number of decimals in a dataframe (R)


I would like to limit the number of decimals when a data frame is imported. My .txt input has 16 decimals in each row for the column Value. My dataframe look like this:

Value 

0.202021561664556
0.202021561664556
0.202021561664556
0.202021561664556
...

My expected dataframe

Value
0.20202156
0.20202156
0.20202156
0.20202156
...

Real input (DF) that does not work:

DF <- "NE001358.Log.R.Ratio
    -0.0970369274475688
    0.131893549586039
    0.0629266495860389
    0.299559132381831
    -0.0128804337656807
    0.0639743960526874
    0.0271669351886552
    0.322395363972391
    0.179591292893632"

DF <- read.table(text=DF, header = TRUE)

Solution

  • Here is.num is TRUE for numeric columns and FALSE otherwise. We then apply round to the numeric columns:

    is.num <- sapply(DF, is.numeric)
    DF[is.num] <- lapply(DF[is.num], round, 8)
    

    If what you meant was not that you need to change the data frame but just that you want to display the data frame to 8 digits then it's just:

    print(DF, digits = 8)
    

    In dplyr 1.0.0 and later one can use across within mutate like this:

    library(dplyr)
    DF %>% mutate(across(where(is.numeric), ~ round(., 8)))