首页 > 解决方案 > 从作为字符串的总和中获取结果

问题描述

我有以下向量:

c("(NA)/2", "(Allreturns)/2", "(Noadjustedgrossincome)/2", "(1+5000)/2", 
"(5000+10000)/2", "(10000+15000)/2", "(15000+20000)/2", "(20000+25000)/2", 
"(25000+30000)/2", "(30000+40000)/2", "(40000+50000)/2", "(50000+75000)/2", 
"(75000+100000)/2", "(100000+200000)/2", "(200000+500000)/2", 
"(500000+1000000)/2", "(1000000+1500000)/2", "(1500000+2000000)/2", 
"(2000000+5000000)/2", "(5000000+10000000)/2", "(10000000ormore)/2"
)

是否有任何直接的方法可以将向量中的字符串替换为总和的结果,对于这种方法是可能的?

期望的结果:

c("NA", "NA", "NA", "2500", "7500"...

标签: rstring

解决方案


使用eval(parse(.))

sapply(seq(v), function(i) eval(parse(text=v[i])))
#  [1]        NA    2500.5    7500.0   12500.0   17500.0
#  [6]   22500.0   27500.0   35000.0   45000.0   62500.0
# [11]   87500.0  150000.0  350000.0  750000.0 1250000.0
# [16] 1750000.0 3500000.0 7500000.0

请注意,我删除了一些用于演示的值。假设dat是您的数据集,为了考虑变量,您可以执行以下操作:

with(dat, sapply(seq(v), function(i) eval(parse(text=v[i]))))

数据:

v <- c("(NA)/2", "(1+5000)/2", "(5000+10000)/2", "(10000+15000)/2", 
"(15000+20000)/2", "(20000+25000)/2", "(25000+30000)/2", "(30000+40000)/2", 
"(40000+50000)/2", "(50000+75000)/2", "(75000+100000)/2", "(100000+200000)/2", 
"(200000+500000)/2", "(500000+1000000)/2", "(1000000+1500000)/2", 
"(1500000+2000000)/2", "(2000000+5000000)/2", "(5000000+10000000)/2"
)

推荐阅读