如何对表示为字符串的值和运算符执行算术运算?

suy*_*tam 2 r

我有一个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 
Run Code Online (Sandbox Code Playgroud)

当我尝试时as.numeric(x),会生成一条警告消息(由强制引入的NA)并将所有元素转换为NA

该怎么办?

G. *_*eck 8

以下是一些替代方案:

1)read.table读取文本,就好像它是一个文件,然后除以:

with(read.table(text = x, sep = "/"), 100 * V1 / V2)
## [1] 66.66667 83.33333 27.27273
Run Code Online (Sandbox Code Playgroud)

2)eval/parse eval/parse通常不赞成,但这是如何工作的:

100 * sapply(as.list(parse(text = x)), eval)
## [1] 66.66667 83.33333 27.27273
Run Code Online (Sandbox Code Playgroud)

3)strsplit

sapply(strsplit(x, "/"), function(x) { x <- as.numeric(x); 100 * x[1] / x[2]})
## [1] 66.66667 83.33333 27.27273
Run Code Online (Sandbox Code Playgroud)

4)gsubfn :: strapplystrapply将使用两个数字字符串,然后将每个数字转换为数字并除以:

library(gsubfn)

strapply(x, "(\\d+)/(\\d+)", ~ 100 * as.numeric(x) / as.numeric(y), simplify = TRUE)
## [1] 66.66667 83.33333 27.27273
Run Code Online (Sandbox Code Playgroud)