在 R 中将字符串从一列提取到另一列

bea*_*boy 5 regex r stringr

我有一个示例数据框,如下所示。

ID 文件
1 11_213.csv
2 13_256.csv
3 11_223.csv
4 12_389.csv
5 14_456.csv
6 12_345.csv

我想根据下划线和句点之间的字符串添加另一列,以获得看起来像这样的数据框。

ID 文件 团体
1 11_213.csv 213
2 13_256.csv 256
3 11_223.csv 223
4 12_389.csv 第389章
5 14_456.csv 第456章
6 12_345.csv 第345章

我想我需要在 stringr 中使用 str_extract 功能,但我不确定我的模式使用什么符号。例如当我使用:

df <- df %>%
mutate("Group" = str_extract(File, "[^_]+"))
Run Code Online (Sandbox Code Playgroud)

我得到下划线之前的所有信息,如下所示:

ID 文件 团体
1 11_213.csv 11
2 13_256.csv 13
3 11_223.csv 11
4 12_389.csv 12
5 14_456.csv 14
6 12_345.csv 12

但这不是我想要的。我应该使用什么来代替“[^_]+”来获取下划线和句点之间的内容?谢谢!

akr*_*run 7

我们可以使用正则表达式查找来提取\\d+a 后面_和 a 之前的数字 ( ).str_extract

library(dplyr)
library(stringr)
df <- df %>%
    mutate(Group = str_extract(File, "(?<=_)(\\d+)(?=\\.)")
Run Code Online (Sandbox Code Playgroud)

或者另一种选择是使用str_removeie 删除子字符串以匹配字符 ( .*) ,包括_或 ( |) 字符..可以匹配正则表达式模式中的任何字符 - 这是默认情况,因此我们将\\其转义以进行文字匹配)

df <- df %>%
        mutate(Group = str_remove_all(File, ".*_|\\..*"))
Run Code Online (Sandbox Code Playgroud)