Получение результата из суммы, которая является строкой - PullRequest
0 голосов
/ 25 мая 2020

У меня есть следующий вектор:

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"...

1 Ответ

2 голосов
/ 25 мая 2020

Использование 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]))))

Data:

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"
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...