2017-05-20 4 views
0

同じパターン* .stage1の文字列が列に設定されています。すべての文字列を取得し、すべての文字列を別の列に箇条書きとしてコピーしたい。 ".stage1"をトリムアウトし、最初の列に ".stage1"の前のすべての文字を入力します。同じパターンの列内の文字列を切り取る

これは多くの時間を節約します。このスクリプトの作成に役立つパッケージを提案できますか?

おかげで、 マゴ

+2

サンプルデータを提供できますか? – akash87

答えて

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は、最初の式に一致するものすべてを2番目の式に置き換えます。その表現は何ですか?

最初の式: "(。*)。\\ステージ1"
。任意の文字に一致します。
。*は任意の数の文字に一致します。
。*はカッコ内にあるため、一致するものは\ 1という変数に格納されます。
"(。*)\\。stage1"は文字列 ".stage1"と\ 1の.stage1の前に文字を格納する前のすべてと一致します。

2番目の表現: "\\ 1"
置換文字列が "\\ 1"になるようにこれを前の文字で置き換えます。あなたはstringrからstr_matchと直接それを行うことができます

0

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呼び出すときに、それが撮影して完全な文字列プラス列を返します値。

関連する問題