dplyr を使用して結合したい 2 つのデータ フレームがあります。1 つは、名を含むデータ フレームです。
test_data <- data.frame(first_name = c("john", "bill", "madison", "abby", "zzz"),
stringsAsFactors = FALSE)
もう 1 つのデータ フレームには、カントロウィッツの名前コーパスのクリーンアップ バージョンが含まれており、性別が識別されます。最小限の例を次に示します。
kantrowitz <- structure(list(name = c("john", "bill", "madison", "abby", "thomas"), gender = c("M", "either", "M", "either", "M")), .Names = c("name", "gender"), row.names = c(NA, 5L), class = c("tbl_df", "tbl", "data.frame"))
test_data
私は基本的に、テーブルを使用してテーブルから名前の性別を調べたいと思っていkantrowitz
ます。これを関数 に抽象化するencode_gender
ので、使用されるデータセット内の列の名前がわからないため、 のように になることを保証できませname
んkantrowitz$name
。
ベース RI では、次の方法でマージを実行します。
merge(test_data, kantrowitz, by.x = "first_names", by.y = "name", all.x = TRUE)
それは正しい出力を返します:
first_name gender
1 abby either
2 bill either
3 john M
4 madison M
5 zzz <NA>
しかし、他のすべてのデータ操作にそのパッケージを使用しているため、dplyr でこれを実行したいと考えています。さまざまな関数の dplyrby
オプションでは、*_join
1 つの列名しか指定できませんが、2 つ指定する必要があります。私はこのようなものを探しています:
library(dplyr)
# either
left_join(test_data, kantrowitz, by.x = "first_name", by.y = "name")
# or
left_join(test_data, kantrowitz, by = c("first_name", "name"))
dplyr を使用してこの種の結合を実行する方法は何ですか?
(Kantrowitzコーパスが性別を識別するのに悪い方法であることは気にしないでください。私はより良い実装に取り組んでいますが、最初にこれを機能させたいと思っています。)