タブ区切りのテキストファイルからdata.frameにデータをインポートしました。次に、C1という列の内容を調整および編集します。この目的のために正規表現が推奨されました。最初に使用したもの:
for (rn in 1:length(C1))
C1s <- strsplit(as.character(C1[rn]), "; ", fixed = TRUE)[[1]]
次のような例の個々のエントリを区切るには:
- [Zhang、Junling] China Agr Univ、Coll Resources&Environm Sci、Beijing 100094、Peoples R China; [Zhang、Junling]ホーエンハイム大学、Inst Plant Nutr、D-7000シュトゥットガルト、ドイツ。[George、Eckhard] Humboldt Univ、Inst Crop Sci、Dept Plant Nutr、D-14979 Grossbeeren、Germany; [George、Eckhard] Leibniz Inst Vegetable&Ornamental Crops Theodor、D-14979 Grossbeeren、Germany
- UNIV DORTMUND、INST PHYS、D-44221 DORTMUND、GERMANY; HUMBOLDT UNIV、INST PHYS、D-15738 ZEUTHEN、ドイツ
- UNIV KEELE、DEPT CHEM、KEELE ST5 5BG、STAFFS、ENGLAND; MT SINAI HOSP、MT SINAI SCH MED、DR AA FISHBERG CTR NEUROBIOL、ニューヨーク、NY 10029; HUMBOLDT UNIV BERLIN、CHARITE HOSP、DEPT PATHOL&CLIN BIOCHEM、ベルリン、ドイツ
- NIFAD、MOLEC MICROBIOL LAB、BETHESDA、MD
それから私はしたかった
- すべて大文字に設定します
- 文字列「Humboldt...Germany」を「HUMBOLDT」に置き換えます。文字列「England」、「Scotland」、「Wales」、および「NorthIreland」を「UNITEDKINGDOM」に置き換えます。
- 米国の州の略語と郵便番号の組み合わせを「USA」に置き換えます
- 米国の州の略語を「USA」に置き換えます
さらに、セミコロン(その後ろのスペースを含む)、その直前の単語、および上記の例の最後の単語以外のすべてを削除したいと思いました。
使用しました
gsub('[.*\\] ', ''(toupper(C1s))
と
gsub(',\\s*', ','(toupper(C1s))
、例えば、しかしそれを正しく動作させることができませんでした。
次の出力を取得したいと思います。
- PEOPLES R CHINA; ドイツ; HUMBOLDT; ドイツ
- ドイツ; HUMBOLDT
- イギリス; アメリカ合衆国; HUMBOLDT
- アメリカ合衆国
だから私の質問は:どうすれば私が望む結果を達成できますか?
よろしくお願いします!
更新と追加の問題
mrdwabの有益な返信とコメントのおかげで、私は多くの前進を遂げました。
残念ながら、角かっこで囲まれた複数の作成者が含まれるこのようなアドレスもあることに気付いたのは今だけです。残念ながら、mrdwabによって提案されたアルゴリズムはこれらでは正しく機能しません。
> test = c("[Bocquet, F. C.; Giovanelli, L.; Abel, M.; Porte, L.; Themlin, J. -M.] Aix Marseille Univ, Inst Mat Microelect & Nanosci Prov IM2NP, F-13397 Marseille 20, France; [Bocquet, F. C.; Giovanelli, L.; Abel, M.; Porte, L.; Themlin, J. -M.] CNRS, Inst Mat Microelect & Nanosci Prov IM2NP, UMR 6242, Marseille, France; [Amsalem, P.; Koch, N.] Humboldt Univ, Inst Phys, D-12489 Berlin, Germany; [Petaccia, L.; Topwal, D.; Gorovikov, S.; Goldoni, A.] Sincrotrone Trieste, I-34149 Trieste, Italy")
これは私が得た結果です:
> test
[1] "[BOCQUET, F. C." "GIOVANELLI, L." "ABEL, M." "PORTE, L."
[5] "FRANCE" "[BOCQUET, F. C." "GIOVANELLI, L." "ABEL, M."
[9] "PORTE, L." "FRANCE" "[AMSALEM, P." "HUMBOLDT"
[13] "[PETACCIA, L." "TOPWAL, D." "GOROVIKOV, S." "ITALY"
これは私が代わりに取得したい結果です:
[1] "FRANCE"; "FRANCE"; "HUMBOLDT"; "ITALY"
各角括弧とその内容を個別に削除するために、これを使用してみました。
C1s = gsub("(.*)[(.*)]", "\\2", C1s)
しかし、その代わりに、最初の開始ブラケットと最後の終了ブラケットの間のすべてが削除されました...最初に角括弧内のすべてのセミコロンをコンマに置き換えればうまくいくでしょうか?私は試した
C1s = gsub("[(.*);(.*)]", "[(.*),(.*)]", C1s)
それを達成するために、しかしそれはうまくいきませんでした。
だから私はその点であなたの助けに感謝します!
それに加えて、残念ながら、私はまだ自分では解決できないように見えるさらに別の障害に立ち往生しています...
これは私の現在の出力です:
> C1s
[1] "PEOPLES R CHINA" "GERMANY" "HUMBOLDT" "GERMANY"
[5] "GERMANY" "HUMBOLDT" "UNITED KINGDOM" "USA"
[9] "HUMBOLDT" "USA"
> dims
[1] 4 2 3 1
> is.list(C1)
[1] FALSE
> is.vector(C1)
[1] TRUE
しかし、この望ましい出力を作成するため に、どのように正確にdimsの情報を使用できますか?:
[1] "PEOPLES R CHINA"; "GERMANY"; "HUMBOLDT"; "GERMANY"
[2] "GERMANY"; "HUMBOLDT"
[3] "UNITED KINGDOM"; "USA"; "HUMBOLDT"
[4] "USA"
よろしくお願いします!