最近处理数据遇到了分数表示的字符串,希望其能变成小数,现找到如下一些解法
例如,有如下分数字符串,要把它转变为小数
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()函数进行字符串截取