2017-05-20 6 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은 첫 번째 표현식과 일치하는 모든 것을 두 번째 표현식으로 바꿉니다. 그 표현들은 무엇입니까?

첫 번째 표현 : "(. *) \\. stage1"
. 모든 문자와 일치합니다.
. *는 임의의 수의 문자와 일치합니다.
. *는 괄호 안에 있기 때문에 일치하는 것이 있으면 \ 1이라는 변수에 저장됩니다.
그래서 "(. *) \\. stage1"은 ".stage1"문자열과 \ 1의 .stage1 앞에 문자를 저장하기 전에 모든 문자열과 일치합니다.

두 번째 표현식 : "\\ 1"
대체 문자열이 "\\ 1"이므로 이전의 문자로 바꾸기를 원합니다.

0

당신은 stringr에서 str_match와 함께 직접 작업을 수행 할 수 있습니다 괄호 안에

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를 호출 할 때 그래서 캡처와 전체 문자열 플러스 열을 반환 값.