在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
我有一个示例数据框,如下所示。
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
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