How to perform arithmetic on values and operators expressed as strings?

后端 未结 2 685
野的像风
野的像风 2020-12-04 00:17

I have a character variable with ratios (proportions) expressed as strings:

x <- c(\"2/3\", \"5/6\", \"3/11\").

I want to conver

2条回答
  •  臣服心动
    2020-12-04 00:56

    Here are some alternatives:

    1) read.table Read the text in as if it were a file and then divide:

    with(read.table(text = x, sep = "/"), 100 * V1 / V2)
    ## [1] 66.66667 83.33333 27.27273
    

    2) eval/parse eval/parse is generally frowned upon but here is how it would work:

    100 * sapply(as.list(parse(text = x)), eval)
    ## [1] 66.66667 83.33333 27.27273
    

    3) strsplit

    sapply(strsplit(x, "/"), function(x) { x <- as.numeric(x); 100 * x[1] / x[2]})
    ## [1] 66.66667 83.33333 27.27273
    

    4) gsubfn::strapply This picks out the two strings of digits using strapply and then converts each to numeric and divides:

    library(gsubfn)
    
    strapply(x, "(\\d+)/(\\d+)", ~ 100 * as.numeric(x) / as.numeric(y), simplify = TRUE)
    ## [1] 66.66667 83.33333 27.27273
    

提交回复
热议问题