У меня есть один набор данных со словами, транскрибированными в ARPABET, например:
dict <- data.frame(
word=c("HH EH L P", "W IH TH", "S AH M . TH IY NG"))
У меня есть другой набор данных, в котором есть возможные сегменты ARPABET с указанным c, соответствующим (но в конечном итоге произвольным) значением, чем-то как показано ниже:
ref <- data.frame(
letter=c("HH", "EH", "L", "P", "W", "IH", "TH", "S", "AH", "M", "IY", "NG", "AA", "B"),
value=c(1.34, 1.91, 2.45, 4.12, 2.12, .69, 5.1, 1.47, 1.98, 3.12, 1.35, 4.11, 1.23, 3.45))
Я пытаюсь вычислить для каждого слова в моем фрейме данных dict сумму соответствующих буквенных значений. Например, "HH EH LP" будет равно 1,34 + 1,91 + 2,45 + 4,12 = 9,82. В идеале мне бы хотелось, чтобы кадр данных выглядел следующим образом:
dict_goal <- data.frame(
word=c("H EH L P", "W IH TH", "S AH M . TH IY NG"),
sum=c(9.82, 7.91, 17.1))
До сих пор мой подход заключался в разделении каждого слова по пробелам, временном перемещении каждого разделенного слова в кадр данных, соединении соответствующих значений. , суммируйте эти значения, а затем добавьте эту сумму обратно к моим исходным данным (dict) по строке. Я попытался использовать приведенный ниже код, но он громоздок и неэффективен, поскольку фактически не соединяет значения букв (просто возвращает значения NA). Суммирование и добавление просты, но я не могу достичь этой точки. Примечание: этот код опирается на пакеты dplyr и stringr.
ref$value <- as.factor(ref.$value)
test <- data.frame()
for(i in 1:3){
test <- str_split(dict[i,], " ")
test <- as.data.frame(test)
colnames(test) <- c("letter")
test <- left_join(test, ref,
by = c("letter" = "value"))
}
Любая помощь будет принята с благодарностью!