R语言杂记公共数据挖掘理论基础

R语言分数字符串变小数

2020-04-15  本文已影响0人  leoxiaobei

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

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()函数进行字符串截取

上一篇 下一篇

猜你喜欢

热点阅读