2012-12-14 7 views
0

입력을 고려하십시오 c("foo 1", "bar 2", "baz"). 이것을 c(1,2,NA) (기본적으로 각 문자열에서 숫자를 추출하거나 존재하지 않는 경우 NA)으로 바꾸고 싶습니다. 첫 번째 패스는 다음과 같습니다.R 공백을 남기면서 번호 추출

funNums = as.numeric(
        regmatches(x$Fun, 
        regexpr('\\d+', x$Fun, perl = T))) 

여기서 x$Fun은 입력 벡터입니다. 이 출력은 내가 c(1,2)인데 regmatches은 일치하지 않는 것을 버리기 때문에 출력됩니다. NA을 포함하도록하려면 어떻게해야합니까?

답변

3
X <- c("foo 1", "bar 2", "baz") 
as.numeric(gsub("([^[:digit:]]*)", "", X)) 
# [1] 1 2 NA 

(. "1 to 2" 같은 문자열을 통과 할 때, 이것은 당신이 어떻게하고 싶은 것을하지 않을 수 12을 반환된다는 점에 유의 수행)

+1

는 "의 잠재적 인 문제를 방지하려면 1을 넘기면 2가된다. 12 "가된다.''([^ [: digit :]] *)''as.numeric'은 후미와 선행 공백을 무시하기 때문에 공백을 남긴 패턴을 사용할 수있다. –

+0

@Dwin - 매우 영리합니다. ''1 ~ 2 ''는 'NA'가된다. –

+0

그리고 더 생각하면 나는 괄호가 필요하다는 것을 의심합니다. –

관련 문제