使用相同的模式修剪列中的字符串

时间:2017-05-20 21:49:29

标签: arrays r string trim data-manipulation

我有一个用相同模式* .stage1填充字符串的列。我想抓住每个字符串,将每个字符串复制到另一列作为项目符号点;修剪掉“.stage1”并用“.stage1”之前的每个字符填充第一列。

这会节省很多时间,你能建议一个可以帮我创建这个脚本的软件包吗?

谢谢, 孙

2 个答案:

答案 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时,它会返回完整字符串以及包含捕获值的列。