Trim 列中具有相同模式的字符串
Trim strings in the column with same pattern
我有一列填充了具有相同模式 *.stage1 的字符串。我想抓取每个字符串,将每个字符串作为项目符号点复制到另一列; trim 输出“.stage1”并用“.stage1”之前的每个字符填充第一列。
这会节省很多时间,你能推荐一个可以帮助我创建这个脚本的包吗?
谢谢,
马哥
复制列应该不是问题。您可以使用 sub
.
制作更改后的版本
## Some sample data
df = data.frame(x = paste0("A", 1:9, ".stage1"))
> df
x
1 A1.stage1
2 A2.stage1
3 A3.stage1
4 A4.stage1
5 A5.stage1
6 A6.stage1
7 A7.stage1
8 A8.stage1
9 A9.stage1
df$x2 = df$x
df$x = sub("(.*)\.stage1", "\1", df$x)
df
x x2
1 A1 A1.stage1
2 A2 A2.stage1
3 A3 A3.stage1
4 A4 A4.stage1
5 A5 A5.stage1
6 A6 A6.stage1
7 A7 A7.stage1
8 A8 A8.stage1
9 A9 A9.stage1
关于 sub
声明的一些额外细节。
sub
会将与第一个表达式匹配的所有内容替换为第二个表达式。那些表情是什么?
第一个表达式:“(.*)\\.stage1”
.匹配任何字符。
.* 匹配任意数量的字符。
因为 .* 在括号中,所以它匹配的任何内容都将存储在名为 \1.
的变量中
所以 "(.*)\\.stage1" 将匹配字符串 ".stage1" 和它之前的所有内容,将 .stage1 之前的字符存储在 \1.
第二个表达式:“\\1”
我们只想用之前的字符替换它,所以替换字符串是“\\1”。
您可以直接使用 str_match
来自 stringr
:
library(stringr)
x <- paste0("A", 1:9, ".stage1") # sample data
str_match(x, "(.*)\.stage")
[,1] [,2]
[1,] "A1.stage" "A1"
[2,] "A2.stage" "A2"
[3,] "A3.stage" "A3"
[4,] "A4.stage" "A4"
[5,] "A5.stage" "A5"
[6,] "A6.stage" "A6"
[7,] "A7.stage" "A7"
[8,] "A8.stage" "A8"
[9,] "A9.stage" "A9"
括号内的值捕获字符串的第一部分,因此当您调用 str_match
时,它 returns 完整的字符串加上包含捕获值的列。
我有一列填充了具有相同模式 *.stage1 的字符串。我想抓取每个字符串,将每个字符串作为项目符号点复制到另一列; trim 输出“.stage1”并用“.stage1”之前的每个字符填充第一列。
这会节省很多时间,你能推荐一个可以帮助我创建这个脚本的包吗?
谢谢, 马哥
复制列应该不是问题。您可以使用 sub
.
## Some sample data
df = data.frame(x = paste0("A", 1:9, ".stage1"))
> df
x
1 A1.stage1
2 A2.stage1
3 A3.stage1
4 A4.stage1
5 A5.stage1
6 A6.stage1
7 A7.stage1
8 A8.stage1
9 A9.stage1
df$x2 = df$x
df$x = sub("(.*)\.stage1", "\1", df$x)
df
x x2
1 A1 A1.stage1
2 A2 A2.stage1
3 A3 A3.stage1
4 A4 A4.stage1
5 A5 A5.stage1
6 A6 A6.stage1
7 A7 A7.stage1
8 A8 A8.stage1
9 A9 A9.stage1
关于 sub
声明的一些额外细节。
sub
会将与第一个表达式匹配的所有内容替换为第二个表达式。那些表情是什么?
第一个表达式:“(.*)\\.stage1”
.匹配任何字符。
.* 匹配任意数量的字符。
因为 .* 在括号中,所以它匹配的任何内容都将存储在名为 \1.
的变量中
所以 "(.*)\\.stage1" 将匹配字符串 ".stage1" 和它之前的所有内容,将 .stage1 之前的字符存储在 \1.
第二个表达式:“\\1”
我们只想用之前的字符替换它,所以替换字符串是“\\1”。
您可以直接使用 str_match
来自 stringr
:
library(stringr)
x <- paste0("A", 1:9, ".stage1") # sample data
str_match(x, "(.*)\.stage")
[,1] [,2]
[1,] "A1.stage" "A1"
[2,] "A2.stage" "A2"
[3,] "A3.stage" "A3"
[4,] "A4.stage" "A4"
[5,] "A5.stage" "A5"
[6,] "A6.stage" "A6"
[7,] "A7.stage" "A7"
[8,] "A8.stage" "A8"
[9,] "A9.stage" "A9"
括号内的值捕获字符串的第一部分,因此当您调用 str_match
时,它 returns 完整的字符串加上包含捕获值的列。