我有一个用相同模式* .stage1填充字符串的列。我想抓住每个字符串,将每个字符串复制到另一列作为项目符号点;修剪掉“.stage1”并用“.stage1”之前的每个字符填充第一列。
这会节省很多时间,你能建议一个可以帮我创建这个脚本的软件包吗?
谢谢, 孙
答案 0 :(得分:2)
复制列应该不是问题。您可以使用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之前的字符的所有内容。\ / p>
第二个表达:“\\ 1”
我们想用之前的字符替换它,所以替换字符串是“\\ 1”。
答案 1 :(得分:0)
您可以直接使用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
时,它会返回完整字符串以及包含捕获值的列。