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
使用 dplyr
和 tidyr
包:
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
我正在处理一个数据集 ("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
使用 dplyr
和 tidyr
包:
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