(この質問は、リンクされた Vlookup スレッドでは回答されていません)
あるデータフレーム (DF2) の値を、DF2 に重複するエントリが含まれる別のデータフレーム (DF1) の値に置き換える方法を探していますが、それらの重複を保持したいと考えています。
構成例として:
2 つのデータフレームがあるとします。DF1 と呼ばれる 1 つには、異なる日付のホテルの傘の正しい番号が含まれています。
5/20、5/25、6/01 に Hilton_A のライン アイテムがあり、関連するアンブレラ # があります。Hilton_B と Hilton_C も同様です。
参照データフレームである DF1 の dput は次のとおりです。
structure(list(Date = structure(c(15852, 15859, 15852, 15859,
15852, 15859, 15852), class = "Date"), Hotel = structure(c(1L,
1L, 2L, 2L, 3L, 3L, 4L), .Label = c("Hilton_A", "Hilton_B", "Hilton_C",
"Hilton_D"), class = "factor"), Umbrellas = c(9340L, 6401L, 9089L,
7716L, 5542L, 5565L, 8158L), datename = c("2013-05-27_Hilton_A",
"2013-06-03_Hilton_A", "2013-05-27_Hilton_B", "2013-06-03_Hilton_B",
"2013-05-27_Hilton_C", "2013-06-03_Hilton_C", "2013-05-27_Hilton_D"
)), .Names = c("Date", "Hotel", "Umbrellas", "datename"), row.names = c(NA,
-7L), class = "data.frame")
DF2 には、さまざまな日付の他のホテルの情報と、DF1 のヒルトンの情報が含まれています。問題は、DF2 のアンブレラ # がヒルトンにとって間違っていることです。これを DF1 のアンブレラ # に置き換える必要があります。
DF2 の dput は次のとおりです。Hilton の数値が正しくありません。また、触れたくない他のデータも含まれています。
structure(list(Date = structure(c(15845, 15852, 15859, 15852,
15859, 15845, 15859, 15845, 15845, 15852, 15845, 15845, 15882
), class = "Date"), Hotel = structure(c(1L, 1L, 1L, 1L, 1L, 2L,
2L, 2L, 3L, 4L, 5L, 6L, 7L), .Label = c("Hilton_A", "Hilton_B",
"Hilton_C", "Hilton_D", "RedRoof_A", "RedRoof_D", "Sheraton_D"
), class = "factor"), Umbrellas = c(263L, 287L, 258L, 110L, 234L,
212L, 265L, 542L, 81L, 51L, 162L, 232L, 493L), datename = c("2013-05-20_Hilton_A",
"2013-05-27_Hilton_A", "2013-06-03_Hilton_A", "2013-05-27_Hilton_A",
"2013-06-03_Hilton_A", "2013-05-20_Hilton_B", "2013-06-03_Hilton_B",
"2013-05-20_Hilton_B", "2013-05-20_Hilton_C", "2013-05-27_Hilton_D",
"2013-05-20_RedRoof_A", "2013-05-20_RedRoof_D", "2013-06-26_Sheraton_D"
)), .Names = c("Date", "Hotel", "Umbrellas", "datename"), row.names = c(NA,
-13L), class = "data.frame")
通常、これは機能します:
DF2$Umbrellas<- replace(DF2$Umbrellas, DF2$datename%in% DF1$datename, DF1$Umbrellas)
(同じホテルが複数の日付にわたる情報を持っているため、"datename" は単にホテルと日付を連結したものです (リストを "unique=ify" することができます))
しかし、DF2 には、保持したいホテルと日付ごとに複数の観察結果があります (つまり、5/27 の Hilton_A は DF2 に 2 回表示されます)。
そのため、Umbrella # を DF1 から DF2 に置き換えようとすると、次のエラー メッセージが表示されます。
Warning message:
In replace(DF2$Umbrellas, DF2$hoteldatename %in% DF1$hoteldatename , :
number of items to replace is not a multiple of replacement length
そして、数字はすべて間違っています。
ここで何が起こっているのか、DF1 の数値を取得して DF2 の該当するすべての観測値を置き換える方法を知っている人はいますか?