R Studio:在table(V&H 两个方向)中查找一个值,然后用作循环中的变量

R Studio: look up a value in table(both direction V&H), then use as a variable in loop

我正在处理一个数据集 ("IndexTable"),它有超过 300 万个观察值。请参阅以下前 6 个观察结果:

     Identity gender type   amount    Year    Month
1       65      F     W     31.88     1987     Jan
2       23      M     P     29.21     1985     Mar
3       45      F     W     44.70     1987     Jan
4       47      F     W     72.64     1987     Jan
5       56      M     P     28.92     1986     Jul
6       09      F     W     34.32     1990     Jan

和将从中搜索值的索引 table ("index")(table 的一部分):

    year  average      Jan      Feb      Mar      Apr      May      Jun      Jul      Aug      Sep      Oct      Nov      Dec
1   1950 32.84210 33.19118 33.10321 33.01572 32.89977 32.81334 32.98665 32.98665 33.10321 32.89977 32.55677 32.41595 32.24857
2   1951 30.09866 31.94615 31.64936 31.43694 30.94371 30.19568 30.09866 29.64623 29.50617 29.29854 29.09382 28.98131 28.78098
3   1952 27.56470 28.28139 28.25313 28.11271 27.67259 27.67259 27.21981 27.24604 27.40444 27.45766 27.21981 27.24604 27.06353
4   1953 26.73099 27.08945 27.01183 26.83243 26.58025 26.68055 26.53038 26.53038 26.70575 26.75628 26.75628 26.68055 26.78162
5   1954 26.25941 26.73099 26.78162 26.53038 26.43120 26.50552 26.35730 25.92244 26.08984 26.13807 26.01783 25.89871 25.75718
6   1955 25.11668 25.66369 25.66369 25.66369 25.52472 25.57087 25.04994 24.96151 25.13901 24.98356 24.72149 24.33854 24.33854

对于 "IndexTable" 中的每个观察值,我想在 "index" 中找到与年份和月份相匹配的值,然后使用该值乘以它的数量以获得调整后的数量。

提前致谢 J

使用 dplyrtidyr 包:

index_long <- index %>% 
  gather(Month, multiplier, Jan:Dec) %>% 
  select(-average)

left_join(IndexTable, index_long, by = c("Year" = "year", "Month" = "Month")) %>% 
  mutate(adjusted_amount = amount*multiplier)

首先,我将月份列与值列乘数聚集到一列中。
我删除了平均列,因为它不需要连接到另一个 table。然后,通过使用左连接,仅将具有匹配年月组合的值连接到 IndexTable。 最后我使用乘数创建了新列 adjusted_amount