gpt4 book ai didi

r - 为无序的重复二元组分配平均值和/或条件分配

转载 作者:行者123 更新时间:2023-12-04 10:43:29 25 4
gpt4 key购买 nike

我遇到了一些超出我的技能范围的事情。我正在处理 IMF 贸易数据,该数据由国家二元组之间的数据组成。 IMF 数据集由“无序重复”记录组成,每个国家/地区都单独报告贸易数据。但由于时间、记录系统、政权类型等多种多样,相应的数值存在差异。我正在尝试以两种方式处理这些数据:

  1. 将平均值分配给重复的二元组。
  2. 根据单独的经济指标或发展指数(我更信任谁?)有条件地分配对偶值。

有几个关于识别无序重复项的讨论 here , here , here , 和 here但经过几天的搜索,我还没有看到我想要做什么。

这是原始数据的示例。实际上还有更多的变量和几十万个二元组:

reporter<-c('USA','GER','AFG','FRA','CHN')
partner<-c('AFG','CHN','USA','CAN','GER')
year<-c(2010,2010,2010,2009,2010)
import<-c(-1000,-2000,-2400,-1200,-2000)
export<-c(2500,2200,1200,2900,2100)
rep_econ1<-c(28,32,12,25,19)

imf<-data.table(reporter,partner,year,import,export,rep_econ1)

imf

reporter partner year import export rep_econ1
1: USA AFG 2010 -1000 2500 28
2: GER CHN 2010 -2000 2200 32
3: AFG USA 2010 -2400 1200 12
4: FRA CAN 2009 -1200 2900 25
5: CHN GER 2010 -2000 2100 19

额外的问题是 importexport 在二元组之间是互逆的,因此它们需要匹配并用绝对值表示。

对于目标 1,生成的 data.table 是:

平均值

 reporter   partner year    import  export  rep_econ1
USA AFG 2010 -1100 2450 28
GER CHN 2010 -2050 2100 32
AFG USA 2010 -2450 1100 12
FRA CAN 2009 -1200 2900 25
CHN GER 2010 -2100 2050 19

对于目标 2:

有条件地分配更高的经济指标 (rep_econ1)

 reporter   partner year    import  export  rep_econ1
USA AFG 2010 -1000 2500 28
GER CHN 2010 -2000 2200 32
AFG USA 2010 -2500 1000 12
FRA CAN 2009 -1200 2900 25
CHN GER 2010 -2200 2000 19

可能并非所有二元组都出现过两次,所以我收录了一张个人唱片。我更喜欢 data.table,但我会选择任何能引导我走上正确道路的东西。

感谢您的宝贵时间。

最佳答案

预处理:

library(data.table)

# get G = reporter/partner group and N = number of rows for each group
# Thanks @eddi for simplifying
imf[, G := .GRP, by = .(year, pmin(reporter, partner), pmax(reporter, partner))]
imf[, N := .N, G]

选项1(手段)

# for groups with 2 rows, average imports and exports
imf[N == 2
, `:=`(import = (import - rev(export))/2
, export = (export - rev(import))/2)
, by = G]

imf


# reporter partner year import export rep_econ1 G N
# 1: USA AFG 2010 -1100 2450 28 1 2
# 2: GER CHN 2010 -2050 2100 32 2 2
# 3: AFG USA 2010 -2450 1100 12 1 2
# 4: FRA CAN 2009 -1200 2900 25 3 1
# 5: CHN GER 2010 -2100 2050 19 2 2

选项2(最高经济指标)

# for groups with 2 rows, choose imports and exports based on highest rep_econ1
imf[N == 2
, c('import', 'export') := {
o <- order(-rep_econ1)
import <- cbind(import, -export)[o[1], o]
.(import, export = -rev(import))}
, by = G]

imf


# reporter partner year import export rep_econ1 G N
# 1: USA AFG 2010 -1000 2500 28 1 2
# 2: GER CHN 2010 -2000 2200 32 2 2
# 3: AFG USA 2010 -2500 1000 12 1 2
# 4: FRA CAN 2009 -1200 2900 25 3 1
# 5: CHN GER 2010 -2200 2000 19 2 2

选项 2 解释:您需要选择具有最高经济指标的行(即 order(-rep_econ1)[1] 行)并将其用于imports,但如果第二行是“可信”行,则需要将其反转。否则你会切换国家,因为第二个报告者的进口(现在是 cbind(import, -export)[o[1],] 的第一个元素)将被指定为第一个报告者的进口(因为它是第一个元素)。

编辑:

如果 imports 和 exports 在输入数据中都是正数并且需要在输出数据中为正数,则上面的两个计算可以修改为

imf[N == 2
, `:=`(import = (import + rev(export))/2
, export = (export + rev(import))/2)
, by = G]

imf[N == 2
, c('import', 'export') := {
o <- order(-rep_econ1)
import <- cbind(import, export)[o[1], o]
.(import, export = rev(import))}
, by = G]

关于r - 为无序的重复二元组分配平均值和/或条件分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53674403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com