【问题标题】:Extracting a string from one column into another in R在R中将字符串从一列提取到另一列
【发布时间】:2021-03-08 17:09:11
【问题描述】:

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

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

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

【问题讨论】:

  • 你需要str_extract(File, "(?&lt;=_)(\\d+)(?=\\.)")

标签: r regex stringr


【解决方案1】:

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

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

或者另一种选择是删除带有 str_remove 的子字符串,即匹配字符 (.*),包括 _ 或 (|) 从 . 开始的字符(. 可以匹配正则表达式模式 - 默认情况下,因此我们转义 \\ 以进行文字匹配)

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

【讨论】:

    【解决方案2】:

    使用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-26
      • 2020-04-23
      • 1970-01-01
      • 2021-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-08
      相关资源
      最近更新 更多