0

いくつかの例外を除いて、Word(.doc)ドキュメントに種(特に鳥の種)のリストがあり、多くの場合、それらはあらゆる種類のデータ分析に役に立たない方法で構造化されます。

リストは、スペースやその他すべてを含むこのようなものになります。これには、分類法(ファミリ)と、一般的で科学的な名前の種が含まれます。

データ

1 STRUTHIONIDAE (1)
Common Ostrich Struthio camelus


2 DIOMEDEIDAE (5 – 1 + 1)

++Northern Royal Albatross Diomedea sanfordi

Black-browed Albatross Thalassarche melanophris

Shy Albatross Thalassarche cauta

Grey-headed Albatross Thalassarche chrysostoma

Atlantic Yellow-nosed Albatross Thalassarche chlororhynchos


3 Procellaridae (11 – 1 + 1)

Southern Giant Petrel Macronectes giganteus

Pintado Petrel Daption capense

Great-winged Petrel Pterodroma macroptera

Soft-plumaged Petrel Pterodroma mollis

Antarctic Prion Pachyptila desolata

White-chinned Petrel Procellaria aequinoctialis

++Spectacled Petrel Procellaria conspicillata

Cory's Shearwater Calonectris [diomedea] borealis

Great Shearwater Puffinus gravis

Sooty Shearwater Puffinus griseus

Manx Shearwater Puffinus puffinus


4 HYDROBATIDAE (3)

Wilson's Storm-Petrel Oceanites oceanicus

British Storm-Petrel Hydrobates pelagicus

Leach's Storm-Petrel Oceanodroma leucorhoa

このようなリストは、テクニカルレポート、地理的分布の設計、地域の保全状況、要約などの特別な情報源です。これは、ほとんど利用できない、または公開されていない地域にとって特に興味深いものです(上記の例は、 www.birdsangola.orgのアンゴラ)。適切にフォーマットされていれば、データはより適切に使用されます。データフレームは、その後のデータ分析の候補として適しています。

上記のリストを使用可能なものに変換して、種の一般名、学名、分類学上の科を抽出したいと思います。data.frameは、適切で自然な候補です。

4

1 に答える 1

0

このコードを実行する前に、上記のデータをクリップボードにコピーしてください。

R コード:

library(stringr)
# Read from clipboard (blank.lines.skip = T)
orig.list <- read.delim2('clipboard', header = F, stringsAsFactors = F)
l.species <- data.frame()
for(i in 1:nrow(orig.list)) {
  tmp.string <- unlist(str_extract_all(orig.list[i, ], "[A-Za-z]+"))
  l.species[i, 1] <- ifelse(length(tmp.string) == 1, tmp.string,
                            paste(tmp.string[1:(length(tmp.string)-2)],
                                  collapse = ' '))
  l.species[i, 2] <- paste(tmp.string[(length(tmp.string) - 1) : length(tmp.string)],
                           collapse = ' ')
  l.species[i, 3]<-ifelse(length(tmp.string) == 1, 1, 0)
}
names(l.species) <- c('common name', 'species', 'is.family')
taxon.family <- toupper(subset(l.species, is.family == 1,
                               select = species)$species)
rows.family <- as.numeric(row.names(subset(l.species, is.family == 1)))
l.species$family <- rep(taxon.family, times = diff(c(rows.family,
                                                     nrow(l.species)+1)))
l.spec.family <- subset(l.species, is.family == 0, select = -is.family) 

結果のオブジェクト:

> head(l.spec.family)                            
                      common name                     species        family
2                  Common Ostrich            Struthio camelus STRUTHIONIDAE
4        Northern Royal Albatross           Diomedea sanfordi   DIOMEDEIDAE
5          Black browed Albatross    Thalassarche melanophris   DIOMEDEIDAE
6                   Shy Albatross          Thalassarche cauta   DIOMEDEIDAE
7           Grey headed Albatross    Thalassarche chrysostoma   DIOMEDEIDAE
8 Atlantic Yellow nosed Albatross Thalassarche chlororhynchos   DIOMEDEIDAE

要約 (941 種のデータセット全体)

library(plyr)
summary.nesp <- ddply(l.spec.family, .(family), summarise,
                      prop_esp = length(family)/nrow(*all.data*)*100)
top.summary.nesp <- head(summary.nesp[order(summary.nesp$prop_esp, decreasing = T),], 6)

> top.summary.nesp
          family prop_esp
79     SYLVIIDAE 8.076514
1   ACCIPITRIDAE 5.419766
48    PASSERIDAE 5.100956
24   ESTRILDIDAE 4.250797
83      TURDIDAE 3.613177
44 NECTARINIIDAE 3.506908
于 2012-08-29T13:32:06.673 に答える