R初心者なので、こんな初歩的なことを投稿するのも恥ずかしいことだけど、いつか同じ初心者の誰かの役に立つことを信じて、まとめておこうと思う。
# ベクタaからcに、種名を入れていく
a <- c("セイヨウタンポポ", "カタバミ", "コハコベ", "ノミノツヅリ")
b <- c("フデリンドウ", "コハコベ", "セイヨウタンポポ")
c <- c("カタバミ", "ミチタネツケバナ", "コハコベ")
例えば、こんなフロラリストをまとめたベクタがあったとします1。
これは、既存のデータを加工するなりして作成できると思います。
intersect(intersect(a, b), c)
ちなみにこの結果は、
[1] "コハコベ"
うん、正しく出力されましたね。
これは一瞬勘違いをしたのですが、正確には
「a or bに含まれている」and「cには含まれていない」
ということを、多くの場合求めたいということだと思う。
こうした場合、unionを使ってaとbの和集合を作り、そこから他のベクトルでintersectで重複要素を外していくのがよい。
setdiff(union(a, b), c)
この結果は
[1] "セイヨウタンポポ" "ノミノツヅリ" "フデリンドウ"
a, b だけでしかみられないノミノツヅリ、フデリンドウもちゃんと出力されていますね。
実際は、もっと沢山のデータセットを扱うものでしょうが、解析のとっかかりにはいい手法だなと、私自身は考えています。
あくまで、例示のためのダミーデータです。 ↩