首页 > 解决方案 > 数据帧计数中的多个部分字符串匹配

问题描述

我一直在寻找其他主题的解决方案,但没有找到。我正在寻找几个部分字符串匹配。字符串在数据框中,但我也在(字符)向量中尝试过。

示例输入:

authors <- c("Edward","Kelly","Simon")
df <- 
Text                                 Date      
Edward was the king of ...           2011          
Kelly has ..                         2014           
Last year Simon..                    2009           
Did you know Edward..                1999     

我想要的输出是:

Author                               Count 
Edward                                2
Kelly                                 1           
Simon                                 1

同样重要的是,列文本中的每一行只匹配一次。因此,如果名称在输入单元格中被提及两次,它仍然应该只匹配一次。

我试过类似的东西:

sum(str_count(df$Text,c("Edward")))

这适用于一个输入名称,但不适用于多个。我希望有人可以帮助我解决这个问题

标签: rstringcountpattern-matching

解决方案


我们可以遍历 'authors',得到str_count,sumenframe它来得到一个单一的数据集

library(tidyverse)
map_df(authors, ~ str_count(df$Text, .x) %>% 
                       sum %>%
                       set_names(.x) %>% 
                       enframe(name = "Author", value = "count")) %>%
    arrange(desc(count))
# A tibble: 3 x 2
#  Author    count
#   <chr>  <int>
#1 Edward     2
#2 Kelly      1
#3 Simon      1

推荐阅读