2017-12-09 28 views
-1

gsub() 함수를 사용하여 데이터에서 원하지 않는 텍스트를 제거합니다. 나는 단지 괄호 안에 나이를 갖고 싶지만 출생의 날짜는 갖고 싶지 않습니다. 그러나 이것은 출생일이 다른 대규모 데이터 세트에 있습니다. 데이터의데이터 세트에서 날짜를 제거하려면 R - gsub()를 사용하십시오.

예 :

Test1$Age 

Sep 10, 1990(27) 
Mar 26, 1987(30 
Feb 24, 1997(20) 
+0

GSUB '('\\ (([0-9] +) \\) ','\\ 1 ' x)' – MichaelChirico

+0

환호하는 Michael, 그러나 이것은 단지 괄호를 제거한다 –

+0

whoops, 잊어 버렸다'. *' – MichaelChirico

답변

3

당신은 stringr 패키지에서이 사용 str_extract()을 수행 할 수 있습니다

s <- "Sep 10, 1990(27)" 

# get the age in parentheses 
stringr::str_extract(s, "\\([0-9]+\\)") 

# just the age, with parentheses removed 
stringr::str_extract(s, "(?<=\\()[0-9]+") 

그리고 출력은 다음과 같습니다

> s <- "Sep 10, 1990(27)" 
> 
> # get the age in parentheses 
> stringr::str_extract(s, "\\([0-9]+\\)") 
[1] "(27)" 
> 
> # just the age, with parentheses removed 
> stringr::str_extract(s, "(?<=\\()[0-9]+") 
[1] "27" 

첫 번째 정규 표현식 하나 이상의 자릿수를 포함하는 쌍을 이루는 괄호와 일치합니다. 두 번째 정규 표현식은 positive lookbehind을 사용하여 여는 괄호 뒤에 하나 이상의 자릿수를 찾습니다.

데이터가 age를라는 이름의 열이있는 data.frame df에있는 경우, 당신은 다음을 수행 할 수 : tidyverse 표기법으로,

df$age <- stringr::str_extract(df$age, "\\([0-9]+\\)") 

을 또는을 :

df <- df %>% mutate(age = stringr::str_extract(age, "\\([0-9]+\\)")) 
1

는 것 같다 두 가지 문제가있을 수 있습니다.

  1. 왼쪽 괄호 이전 날짜 SIS는
  2. 오른쪽 괄호 때때로없는 원하지 않는 그리고 이들은 sub으로 해결할 수 있습니다

1) 하위를 삽입해야합니다. 경기

  • 옵션 오른쪽 괄호 다음에 캡처 그룹 (\\d+)
  • 숫자 다음에
  • 문자 그대로 왼쪽 괄호 [(] 다음 문자 .*의 수 [)]?

및 그 다음 왼쪽 괄호로 바꾸고 캡처 그룹 \\1에 일치시키고 오른쪽 괄호.

패키지가 사용되지 않습니다. 대신, 당신이 다음 숫자 필드로 나이를 원한다면

pat <- ".*[(](\\d+)[)]?" 
transform(test, Age = sub(pat, "(\\1)", Age)) 

:

transform(test, Age = as.numeric(sub(pat, "\\1", Age))) 

2) 문자열은/서브 또 다른 가능성은 왼쪽에서 모든 것을 제공 이후 13 문자를 걸릴 것입니다 괄호를 문자열의 끝에 추가하고 a) 빠진 경우 삽입하십시오. )?$은 문자열 끝의 오른쪽 괄호 또는 문자열이없는 경우 문자열의 끝과 일치합니다. 그것은 오른쪽 괄호로 대체됩니다.다시, 패키지는 사용되지 않습니다.

transform(test, Age = sub(")?$", ")", substring(Age, 13)) 

이의 변형 우리가 숫자 나이가 대신있는 경우), 14 문자에서 모든 것을 받아 최종를 제거하는 것입니다 원한다면. 사용 read.table read.table

transform(test, Age = as.numeric(sub(")", "", substring(Age, 14)))) 

3) sep = "("comment.char = ")"으로 Age 필드를 읽고 두 번째 열 읽기를 선택합니다. 이렇게하면 숫자로 된 나이가 주어지며 sprintf을 사용하여 괄호로 묶을 수 있습니다. Age이 인 경우 (요인과 반대) as.character(Age)은 단지 Age으로 작성할 수 있습니다.

다시 패키지가 사용되지 않습니다. 이것은 정규식을 사용하지 않습니다.

transform(test, Age = 
    sprintf("(%s)", read.table(text = as.character(Age), sep = "(", comment.char = ")")$V2) 

참고 재생 가능한 형태로 입력된다 :

test <- data.frame(Age = c("Sep 10, 1990(27)", "Mar 26, 1987(30", "Feb 24, 1997(20)"))