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

5
我有一个类似下面的示例数据框。
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 文件
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
但这不是我想要的。请问应该使用什么正则表达式才能得到下划线和句点之间的内容?谢谢!

2
你需要使用 str_extract(File, "(?<=_)(\\d+)(?=\\.)") - akrun
2个回答

6

我们可以使用正则表达式的环视来提取紧跟着_,并且在.之前的数字(\\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, ".*_|\\..*"))

1

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接