#r
#r
Вопрос:
Предполагая, что у меня есть следующий упрощенный именованный список
tbl1 <- c(a=5,b=3,c=6)
и второй список символов
lst2 <- c("abbacb","aacb")
Как я могу вычислить сумму для каждой строки в lst2
на основе значений в tbl1
?
Чтобы быть более точным, «abbacb» должен давать 5 3 3 5 6 3=25 в то время как «aacb» = 19.
Ответ №1:
Вот вариант с strsplit
вводом list
символов. Затем используйте именованный вектор для замены значений путем сопоставления с names
из ‘tbl1’ и получите sum
из замененных значений
sapply(strsplit(lst2, ""), function(x) sum(tbl1[x]))
#[1] 25 19
Или другой вариант — заменить внутри строки без разделения, а затем выполнить eval
uation
library(stringr)
sapply(str_replace_all(str_replace_all(lst2, "(?<=.)(?=.)", " "),
setNames(as.character(tbl1), names(tbl1))),
function(x) eval(parse(text = x)))
#5 3 3 5 6 3 5 5 6 3
# 25 19