2017-06-07 32 views
-2

我試圖從向量提取年齡(數值),tryied以下,但憑着努力R中提取數字值(從自由文本)

例子: -

a <- "age-32 agge32 age 45 aage 56 agee 34" 
    b <- gsub("[Aa]g.e?"," age ",a) 
    sa <- strsplit(x=b, split="\\s") 
    age <- stringr::str_extract(sa, "(age?)(\\s[^\\s]+){1}") 
    (or) 
    age <- grep("(([^\\s]+\\s){0}(age)(\\s[^\\s]+){1})",sel,value = TRUE) 
+0

如果要提取所有號碼,嘗試'str_extract_all(一,「\ \ d +「)'。 – Lamia

+0

感謝您的早期更新,但實際上自由文本包含其他數字,如日期,地址的地址,Pincode等...我想提取年齡(數字),其後是字符,如「age | agge |年齡|年齡|年齡「例子: - 一個< - 」年齡32 agge32年齡45歲齡56年齡34歲24-06-2015門No.17/7,惠靈頓第三街2100067號「 –

+0

對不起,我的錯誤,要求我只想提取後面跟着字符的年齡(數字),如「age | agge | age- | agee | Age」 a < - 「父親的年齡-52母親agge42兒子的年齡9 Daugther aage 6地址是門23 20002,doc 26-07-1999 pincode 260074「> str_extract(str_extract_all(a,」(?> age | agg)。+?\\ d +「)[[1]],」\\ d +「) 輸出:[1]不適用不適用不適用 預期輸出爲:52 42 9 6 ..需要幫助 –

回答

1

是這是你想要什麼:

library(stringr) 

as.numeric(str_extract_all(a,"\\d+")[[1]]) 

或使用gregexprregmatches基礎R

as.numeric(regmatches(a,gregexpr("\\d+",a))[[1]]) 

或使用grepstrsplit基礎R

as.numeric(grep("\\d+",strsplit(a,split=" |-|[a-zA-Z]")[[1]],value=T)) 

輸出

[1] 32 32 45 56 34 
+0

謝謝t他早先更新,但實際上自由文本包含其他數字,如日期,地址的地址,Pincode等...我想提取年齡(數字)後面跟着字符,如「age | agge | age- |艾吉|年齡」 實施例: - 一個< - 「年齡32歲agge32 45奧格56艾吉34 24-06-2015 DoorNo1,27/7,第三街道,惠靈頓,銷2100067」 –

+0

@BalajiS,A謙虛請求,當你問一個問題時,把所有的東西都放進去,我怎麼會知道你的數據有日期等等。你從來沒有在那裏提過它,現在這個問題已經被投票封閉了,即使有人想幫忙也不會幫助你。根據你的解決方案,你可以試試這個:'library(stringr); str_extract(str_extract_all(a,「(?> age | agg)。\\ d +」)[[1]],「\\ d +」)',這應該適用於您的評論中提供的給定字符串。如果此解決方案正常工作,請使用綠色勾號將答案標記爲已接受。 – PKumar

+0

@BalajiS'library(stringr)'; 'str_extract_all(a,「(?> age | agg)。+?\\ d +」)[[1]],「\\ d +」)',如果您的年齡拼寫不同,年齡你想放在用管道分隔符分開的lookaround表達式中。 – PKumar