【发布时间】:2020-04-29 02:25:48
【问题描述】:
我有一个数据集,其中包含在 ARABET 中转录的单词,如下所示:
dict <- data.frame(
word=c("HH EH L P", "W IH TH", "S AH M . TH IY NG"))
我有另一个数据集,其中可能包含具有特定、对应(但最终是任意)值的 ARABET 段,如下所示:
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 L P”将等于 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"))
}
任何帮助将不胜感激!
【问题讨论】:
-
那是我的错! 17.1 是正确的输出。谢谢!
标签: r string dplyr match stringr