Convert a character vector of mixed numbers, fractions, and integers to numeric

后端 未结 2 998
迷失自我
迷失自我 2020-11-29 12:23

I\'m trying to write an R function to convert fractions and mixed numbers to decimals. e.g.

mixedToFloat <- function(x){
    x <- sub(\' \', \'+\', x,         


        
2条回答
  •  再見小時候
    2020-11-29 13:01

    1) This uses strapplyc to extract the numbers and then calc puts them in standard form, converts them to numeric and performs the calculation:

    library(gsubfn)
    
    ff <- c('1 1/2', '2 3/4', '2/3', '11 1/4', '1')
    calc <- function(s) {
        x <- c(if (length(s) == 2) 0, as.numeric(s), 0:1)
        x[1] + x[2] / x[3]
    }
    sapply(strapplyc(ff, "\\d+"), calc)
    

    2) A different approach is to convert each expression into valid R code and then parse and evaluate each.

    sapply(sub(" ", "+", ff), function(x) eval(parse(text = x)))
    ##      1 1/2      2 3/4        2/3     11 1/4          1 
    ##  1.5000000  2.7500000  0.6666667 11.2500000  1.0000000 
    

提交回复
热议问题