将混合数字、分数和整数的字符向量转换为数值

2024-03-30

我正在尝试编写一个 R 函数来将分数和带分数转换为小数。例如

mixedToFloat <- function(x){
    x <- sub(' ', '+', x, fixed=TRUE)
    return(unlist(lapply(x, function(x) eval(parse(text=x)))))
}

> mixedToFloat(c('1 1/2', '2 3/4', '2/3', '11 1/4', '1'))
[1]  1.5000000  2.7500000  0.6666667 11.2500000  1.0000000

这适用于我能想到的大多数情况,但感觉有点hackish。有没有更标准的方法来做到这一点?


1)这使用strapplyc提取数字,然后calc将它们放入标准形式,将它们转换为数字并执行计算:

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)另一种方法是将每个表达式转换为有效的 R 代码,然后解析并计算每个表达式。

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 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将混合数字、分数和整数的字符向量转换为数值 的相关文章

随机推荐