R语言分数字符串变小数

作者: leoxiaobei | 来源:发表于2020-04-15 17:47 被阅读0次

    最近处理数据遇到了分数表示的字符串,希望其能变成小数,现找到如下一些解法
    例如,有如下分数字符串,要把它转变为小数

    options(stringsAsFactors = F)
    a <- c("1/2","6/11","13/21","71/132","136/555")
    a <- data.frame(name=a)
    

    第一种方法

    b <- apply(a,1,function(x) eval(parse(text=x)))
    

    利用eval(parse())函数,不多说

    第二种方法

    library(stringr)
    b <- as.data.frame(apply(str_split(a$name,"/",simplify = T),2,as.numeric))
    b <- b[,1]/b[,2]  
    

    利用stringr包中的字符串拆分函数str_split()将其拆分并简化

    第三种方法

    b <- lapply(str_split(a$name,"/"),as.numeric)
    b <- sapply(b,function(x) temp=x[[1]]/x[[2]] )
    

    同样利用str_split()函数但不简化,之后使用sapply()函数简化

    第四种方法

    library(DOSE)
    b <- parse_ratio(a$name)
    

    直接使用DOSE包中现成的函数

    第五种方法

    temp1 <- as.numeric(sub("(\\d+)/\\d+","\\1",a$name))
    temp2 <- as.numeric(sub("\\d+/(\\d+)","\\1",a$name))
    b <- temp1/temp2
    

    利用sub()函数查找并保留想要的部分

    第六种方法

    index <- str_locate(a$name,"/")[,1]
    temp1 <- as.numeric(str_sub(a$name,1,index-1))
    temp2 <- as.numeric(str_sub(a$name,index+1,nchar(a$name)))
    b <- temp1/temp2
    

    利用str_locate()函数定位“\”符号,之后使用str_sub()函数进行字符串截取

    相关文章

      网友评论

        本文标题:R语言分数字符串变小数

        本文链接:https://www.haomeiwen.com/subject/ppqhvhtx.html