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

Extracting a string from one column into another in R

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

ID File
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 File Group
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, "[^_]+"))

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

ID File Group
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+) 以及 .str_extract

之前的数字 (\d+)
library(dplyr)
library(stringr)
df <- df %>%
    mutate(Group = str_extract(File, "(?<=_)(\d+)(?=\.)")

或者另一种选择是删除带有 str_remove 的子字符串,即匹配字符 (.*),包括来自 [=14] 的 _ 或 (|) 个字符=] 之后(. 可以在正则表达式模式下匹配任何字符——默认情况下,所以我们转义 \ 它以进行文字匹配)

df <- df %>%
        mutate(Group = str_remove_all(File, ".*_|\..*"))

使用 gsub

的基础 R 选项
transform(
  df,
  Group = gsub(".*_(\d+)\..*", "\1", File)
)

给予

  ID       File Group
1  1 11_213.csv   213
2  2 13_256.csv   256
3  3 11_223.csv   223
4  4 12_389.csv   389
5  5 14_456.csv   456
6  6 12_345.csv   345