R中字符串上类似字典的匹配

时间:2019-05-20 15:14:30

标签: r dplyr strsplit vocabulary

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

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

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 个答案:

答案 0 :(得分:2)

一种选择是用定界符,拆分“组”,以separate_rows扩展行,对键/ val数据集('df_2')进行联接,并以'元素”,获取“值”的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]))