これは文字ベクトルを返します。正規表現を3つのキャプチャグループに分割し、括弧で区切って読んでください。最初の数字は連続した数字の数で、それに続く任意の数の非数字、5桁の数字です。最初と3番目のものだけを空白で返します(一致するものがある場合)。一致しない場合は変更しません。
> gsub("([0-9]*)(\\D*)(\\d{5})", "\\1 \\3", test)
[1] "1234 90001" "9876 94501"
さらに、(あなたが先行ゼロを維持するために必要になるため)文字としてジッパーで読むためにおそらくより良い数値ベクトル
> scan(text=gsub("([0-9]*)(\\D*)(\\d{5})", "\\1 \\3", test), what=list("", ""))
Read 2 records
[[1]]
[1] "1234" "9876"
[[2]]
[1] "90001" "94501"
のセットを返すために解析する必要があるだろうが、通りを変換することができこれは、より便利にするために
> scan(text=gsub("([0-9]*)(\\D*)(\\d{5})", "\\1 \\3", test), what=list(numeric(), ""))
Read 2 records
[[1]]
[1] 1234 9876
[[2]]
[1] "90001" "94501"
:what
リストの種類を変えることで、数値の数字
> setNames(data.frame(scan(text=gsub("([0-9]*)(\\D*)(\\d{5})", "\\1 \\3", test),
what=list(numeric(), "")) ,
stringsAsFactors=FALSE),
c("StrtNumber", "ZIP"))
Read 2 records
StrtNumber ZIP
1 1234 90001
2 9876 94501
あなたの住所が構造上実質的に同一でない場合は、ジオコーディングが最良の方法です:http://stackoverflow.com/questions/16413/parse-usable-street-address-city-state-zip- from-a-string – majom
期待される出力は何ですか? '1234 90001'? – zx8754
それは私が目指したいものです。各テキスト行にはさまざまな情報が混在しています。時々、会話の要約だけです。時には、「Johnは1234 Parks St.、Los Angeles、CA 90001に連絡される」などのアクションです。 – djturbine