2 つのデータ フレームをマージする必要があります。最初のものは次のようになります。
> df1 <- data.frame(Artist = c("Vincent van ", "Vincent van ", "Theo van Gogh", "Alexandre", "Alexandre"), Location = c("a","a","a","b","c"), time = c(1,2,1,1,1))
> df1
Artist Location time
1 Vincent van a 1
2 Vincent van a 2
3 Theo van Gogh a 1
4 Alexandre b 1
5 Alexandre c 1
そして2番目:
> df2 <- data.frame(Artist = c("Vincent van Gogh", "Theo van Gogh", "Alexandre Dumas", "Alexandre Dumas"), HomeNumber = c(123,234,456,789), Location = c( "a","a","b","c"))
> df2
Artist HomeNumber Location
1 Vincent van Gogh 123 a
2 Theo van Gogh 234 a
3 Alexandre Dumas 456 b
4 Alexandre Dumas 789 c
そして、私はこのデータフレームが欲しい:
> df3 <- data.frame(Artist = c("Vincent van ", "Vincent van ", "Theo van Gogh", "Alexandre", "Alexandre"), Location = c("a","a","a","b","c"), time = c(1,2,1,1,1), HomeNumber = c(123,123,234,456,789))
> df3
Artist Location time HomeNumber
1 Vincent van a 1 123
2 Vincent van a 2 123
3 Theo van Gogh a 1 234
4 Alexandre b 1 456
5 Alexandre c 1 789
>
マージは Theo に対してのみ機能します。
> df3 <- merge(df1, df2, by.x = "Artist", by.y = "Artist", all.x =TRUE)
> df3
Artist Location.x time HomeNumber Location.y
1 Alexandre b 1 NA <NA>
2 Alexandre c 1 NA <NA>
3 Theo van Gogh a 1 234 a
4 Vincent van a 1 NA <NA>
5 Vincent van a 2 NA <NA>
その理由は 2 つあります。(a) Vincent の姓の一部が欠落してdf1
いる。(b) アレクサンドルは、アレクサンドル デュマ シニアとアレクサンドル デュマ ジュニアの名前です。
で (a) に取り組むことができdf1$Artist <- gsub("Vincent van $","Vincent van Gogh", df1$Artist)
ますが、私のデータは実際には非常に大きく、実行する前gsub
にまず Vincent のフルネームを知る必要があります。考えられる解決策の 1 つはgrep("Vincent van "...
、df2 で使用することです。結果のベクトル1
のgsub
長df2$Artist
さdf1
が 私はそれを行う方法がわかりません。
(b) は私には少しトリッキーです。私が考えることができる解決策の 1 つ (ただしコーディングはできません) は、if
最初に関数を使用して 1 つの場所から Alexandre を選択し、次に (a) の解決策をgsub
名前に使用することです。
(a) と (b) を解くと、目的の が返されると思いますdf3
。これらのデータフレームを効率的にマージする方法を知っていますか? ありがとう!
編集:Alexandre
実際には2つの異なるユニットであることに注意してください。したがって、2 つをマージする場合、関連する HomeNumber と Location が必要です。Vincent
は 1 つの単位ですが、時間内に 2 つの観測があります。