从 str_extract_all 的结果中找到原始字符串

Find the original strings from the results of str_extract_all

我对编码还很年轻,经常无法靠自己找出更好的函数或结果来完成某些任务。 在对特定模式使用 str_extract_all 后,我对跟踪原始字符串有疑问。

这是一个名为“水果”的示例数据。

index Fruit
1 apple
2 banana
3 strawberry
4 pineapple
5 bell pepper

我用str_extract_all(fruit, "(.)\1")提取了重复的辅音,得到了“pp”、“rr”、“pp”、“ll”、“pp”。

还通过 str_subset(fruit, "(.)\1") 跟踪了(那些提取结果的)原始字符串。这是我得到的。

index fruit
1 apple
2 strawberry
3 pineapple
4 bell pepper

但是,我想知道“每个”提取结果的来源。因此,使用 str_subset 无法捕获来自同一字符串的那些结果。以下数据框是我期望获得的。

index fruit pattern
1 apple pp
2 strawberry rr
3 pineapple pp
4 bell pepper ll
4 bell pepper pp

我不确定我是否清楚地解释了我的问题。任何反馈和想法将不胜感激。

你的代码已经做了你想要的。您只需要创建一个额外的列来存储 str_extract_all 的输出,如下所示:

由于 str_extract_all() returns 一个列表,我们需要 unnest 将列表变成行。

代码的最后一行是创建一个连续的索引(因为“banana”没有了,索引2​​也没有了)。

library(tidyverse)

fruit %>% 
  mutate(pattern = str_extract_all(Fruit, "(.)\1")) %>% 
  unnest(pattern) %>%
  mutate(index = as.numeric(as.factor(index)))

# A tibble: 5 × 3
  index Fruit       pattern
  <dbl> <chr>       <chr>  
1     1 apple       pp     
2     2 strawberry  rr     
3     3 pineapple   pp     
4     4 bell pepper ll     
5     4 bell pepper pp