Вот один грубый подход в базе R:
Разделите каждый символ в Word
столбце dataset2
, оставьте только гласные и match
это с dataset1
s Letter
, чтобы получить соответствующие value
и sum
ит.
dataset2$Sum_of_vowel_value <- sapply(strsplit(as.character(dataset2$Word), ""),
function(x) sum(dataset1$value[match(vowel[match(tolower(x), vowel)],
dataset1$Letter)], na.rm = TRUE))
dataset2
# Word Sum_of_vowel_value
#1 Wood 30
#2 Table 6
#3 Chair 10
#4 Desk 5
Чтобы лучше это понять, мы можем разбить функцию по шагам.
Сначала мы разбиваем Word
на отдельные символы
strsplit(as.character(dataset2$Word), "")
#[[1]]
#[1] "W" "o" "o" "d"
#[[2]]
#[1] "T" "a" "b" "l" "e"
#[[3]]
#[1] "C" "h" "a" "i" "r"
#[[4]]
#[1] "D" "e" "s" "k"
Следующим шагом является сохранение только гласных.
sapply(strsplit(as.character(dataset2$Word), ""),
function(x) vowel[match(tolower(x), vowel)])
#[[1]]
#[1] NA "o" "o" NA
#[[2]]
#[1] NA "a" NA NA "e"
#[[3]]
#[1] NA NA "a" "i" NA
#[[4]]
#[1] NA "e" NA NA
Теперь для этих гласных мы получаем соответствующее значение из dataset1
sapply(strsplit(as.character(dataset2$Word), ""),
function(x) dataset1$value[match(vowel[match(tolower(x), vowel)],
dataset1$Letter)])
#[[1]]
#[1] NA 15 15 NA
#[[2]]
#[1] NA 1 NA NA 5
#[[3]]
#[1] NA NA 1 9 NA
#[[4]]
#[1] NA 5 NA NA
Наконец, мы суммируем все эти значения, чтобы получить окончательный результат как:
#[1] 30 6 10 5
данные
vowel <- c('a', 'e', 'i', 'o', 'u')
dataset1 <- data.frame(Letter = letters, value = 1:26)
dataset2 <- structure(list(Word = structure(c(4L, 3L, 1L, 2L),
.Label = c("Chair", "Desk", "Table", "Wood"), class = "factor")),
row.names = c(NA, -4L), class = "data.frame")