2012-12-14 62 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

爲了避免「潛在的問題因爲'as.numeric'忽略尾隨和前導空格,因此「1 pass 2」變成12可以使用一個模式,它留下了''([^ [:digit:]] *)「中的空格。 –

+0

@Dwin - 非常聰明。 '「1到2」'然後變成'NA'。 –

+0

並進一步思考我懷疑需要parens。 –