gpt4 book ai didi

r - 将字符串转换为R中的值

转载 作者:行者123 更新时间:2023-12-04 06:41:25 25 4
gpt4 key购买 nike

举个例子:

s <- c("1y1","2y1","1.5y2","1.8y2")


y1和y2表示将2和1.8相乘。

1y1 = 1*2=2    
1.5y2 = 1.5*1.8 = 2.7


因此,结果将是 c(2,4,2.7,3.24)
我怎样才能得到它?

我可以通过 c(1,2.5,3,2.7)*c(2,2,1.8,1.8)来完成,但是如果字符串很长,它就不是很优雅。

最佳答案

使用gsub将y1和y2替换为其各自的数值,然后可以使用经典的eval(parse(..))评估结果所得的数字表达式。

s <- c("1y1","2y1","1.5y2","1.8y2")

s <- gsub('y1','*2',s)
s <-gsub('y2','*1.8',s)

sapply(s,function(x)eval(parse(text=x)))
1*2 2*2 1.5*1.8 1.8*1.8
2.00 4.00 2.70 3.24


使用 gsubfn及其更灵活的功能替代版本来编辑更优雅的选项。

> library(gsubfn)
> sub.f <- function(x,y) as.numeric(x) * ifelse(y == 1, 2, 1. 8)
> as.numeric(gsubfn('(.*)y(.*)', sub.f, s))
[1] 2.00 4.00 2.70 3.24


我们将每个表达式分成两个分量x和y,并使用它们(一旦强制转换为数字)来手动计算表达式。

或者,此衬板:

> strapply(s, '(.*)y(.*)', ~ as.numeric(x) * ifelse(y == 1, 2, 1.8), simplify = TRUE)
[1] 2.00 4.00 2.70 3.24

关于r - 将字符串转换为R中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20876205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com