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 完整的字符串加上包含捕获值的列。