我有一个 character
比率(比例)表示为字符串的变量:x <- c("2/3", "5/6", "3/11")
.
我想将 x 中的字符值转换为百分比。因此,我想要的输出是:
c(2/3, 5/6, 3/11) * 100
# [1] 66.66667 83.33333 27.27273
当我尝试
as.numeric(x)
, 生成警告信息(强制引入的 NAs)并且所有元素都转换为 NA
该怎么办?
最佳答案
以下是一些替代方案:
1) 读表 读入文本,就好像它是一个文件,然后分割:
with(read.table(text = x, sep = "/"), 100 * V1 / V2)
## [1] 66.66667 83.33333 27.27273
2) 评估/解析 eval/parse 通常不受欢迎,但它是如何工作的:
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 这使用
strapply
挑选出两个数字串然后将每个转换为数字并除以:library(gsubfn)
strapply(x, "(\\d+)/(\\d+)", ~ 100 * as.numeric(x) / as.numeric(y), simplify = TRUE)
## [1] 66.66667 83.33333 27.27273
关于r - 如何对表示为字符串的值和运算符执行算术运算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36073503/