首页 > 解决方案 > 在 R 中合并行和求和

问题描述

我有一个相对较大的数据集(~9000 行/观察),旨在估计贸易流。为此,我有一个数据集,在其第一列中包含国家对和年份的唯一标识符,分别表示进口商和出口商以及年份,即

> head(data)
               cp    id_IM    id_EX iso2_a iso2_t Freq value  date_c
1 AD_2015_ES_2015 AD_2015 ES_2015     AD     ES    2 20775   2015
2 AD_2015_ES_2015 AD_2015 ES_2015     AE     AM    2 20000   2015
3 AE_2008_AT_2008 AE_2008 AT_2008     AE     AT    1    25   2008
4 AE_2008_EG_2008 AE_2008 EG_2008     AE     EG    1   393   2008
5 AE_2008_GB_2008 AE_2008 GB_2008     AE     GB    2  8896   2008
6 AE_2008_GB_2008 AE_2008 GB_2008     AE     GB    2 59856   2008   2008

然后,我合并了国家/地区对,这样我每年只有一个国家/地区对并求和

agg <- zephyr %>% ddply(.
(cp, id_a, id_t, iso2_a, iso2_t, date_a, date_c, Freq), 
function(x) c(value=sum(x$value)))

虽然我也不确定 R 是否真的做了我想要的。因此,我的问题是:

(1)如何对值列而不是所有其他列求和并删除重复项,以便我每年都有一个国家对,其中包含所有重复项的总和值,即

               cp    id_IM    id_EX iso2_a iso2_t Freq value  date_c
1 AD_2015_ES_2015 AD_2015 ES_2015     AD     ES    2 20775   2015
2 AD_2015_ES_2015 AD_2015 ES_2015     AD     ES    2 20000   2015

变成

               cp    id_IM    id_EX iso2_a iso2_t Freq value date_c
1 AD_2015_ES_2015 AD_2015 ES_2015     AD     ES    2   40775  2015

(2) 因为我想要国家 a 和 b 之间的全部贸易流量,所以我还需要将从 a 到 b 的流量与从 b 到 a 的流量相加。换句话说,我怎么能总结

               cp    id_IM    id_EX iso2_a iso2_t Freq value  date_c
1 AD_2015_ES_2015 AD_2015 ES_2015     AD     ES    1 20775   2015
2 ES_2015_AD_2015 ES_2015 AD_2015     ES     AD    1 20000   2015

所以这两个观察结果仍然存在,但它们的价值被增加了:

               cp    id_IM    id_EX iso2_a iso2_t Freq value  date_c
1 AD_2015_ES_2015 AD_2015 ES_2015     AD     ES    1 40775   2015
2 ES_2015_AD_2015 ES_2015 AD_2015     ES     AD    1 40775   2015

非常感谢您的帮助,因为作为一个初学者,我真的很努力。

标签: r

解决方案


推荐阅读