R中字符串的类字典匹配

Posted

技术标签:

【中文标题】R中字符串的类字典匹配【英文标题】:Dictionary-like matching on string in R 【发布时间】:2019-10-06 23:48:11 【问题描述】:

我有一个数据框,其中的字符串变量是元素的非正式列表,可以在符号上拆分。我想在另一个数据集的基础上对这些元素进行操作。

例如任务:计算元素的总和

df_1 <- data.frame(element=c(1:2),groups=c("A,B,C","A,D"))
df_2 <- data.frame(groups=c("A","B","C","D"), values=c(1:4))

desired <- data.frame(element=c(1:2),groups=c("A,B,C","A,D"),sum=c(6,5))

【问题讨论】:

现在已修复,谢谢 【参考方案1】:

一个选项是通过分隔符, 拆分“组”以扩展具有separate_rows 的行,与键/val 数据集(“df_2”)进行连接,以“元素”为基础,得到'values' 的sum

library(tidyverse)
df_1 %>% 
  separate_rows(groups) %>% 
  left_join(df_2) %>% 
  group_by(element) %>%
  summarise(groups = toString(groups), sum = sum(values))
# A tibble: 2 x 3
#  element groups    sum
#    <int> <chr>   <int>
#1       1 A, B, C     6
#2       2 A, D        5

或者base R 的另一个选项是使用命名键/值vector 'nm1') 来更改拆分后的list 元素sum 中的值并将其分配给'df_1 中的新列'

nm1 <- setNames(df_2$values, df_2$groups)
df_1$sum <- sapply(strsplit(as.character(df_1$groups), ","), function(x) sum(nm1[x]))

【讨论】:

以上是关于R中字符串的类字典匹配的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode——通过删除字母匹配到字典里最长单词(子序列)

从位于字典中的数组中删除与搜索词匹配的所有值(字符串)?

通过删除字母匹配到字典里最长单词

《LeetCode之每日一题》:149.通过删除字母匹配到字典里最长单词

在字符串中查找与字典中的值匹配的单词,然后在新列中返回键

将字符串与字典值完全匹配并检索键 - python