我有一个示例数据框,如下所示。
| 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 |
但这不是我想要的。我应该使用什么来代替“[^_]+”来获取下划线和句点之间的内容?谢谢!
我们可以使用正则表达式查找来提取\\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)