R:合并两个数据帧中的值的问题

时间:2019-03-04 09:35:36

标签: r dataframe

我有两个数据帧。第一个包含有关收购的信息:

transactions <- data.frame(ID=c('XXXX-2000', 'XXXX-2000', 'XXXX-2001', 
'XXXX-2002', 'YYYY-2000','YYYY-2000'),
                       Company = 
c('XXXX','XXXX','XXXX','XXXX','YYYY','YYYY'),
                       Year = c(2000, 2000, 2001, 2002, 2000, 2000),
                       Crossborder= c(1,0,0,1,1,0),
                       Relatedness = c(3,2,0,2,1,1),
                       Target.size = c(50,49,25,33,290,440))

       ID   Company Year Same.country Relatedness Target.size
XXXX-2000    XXXX 2000           1           3          50
XXXX-2000    XXXX 2000           0           2          49
XXXX-2001    XXXX 2001           0           0          25
XXXX-2002    XXXX 2002           1           2          33
YYYY-2000    YYYY 2000           1           1         290
YYYY-2000    YYYY 2000           0           1         440

另一个数据框包含有关收购公司的财务信息

financials <- data.frame(ID=c('XXXX-1999','XXXX-2000','XXXX-2001', 'XXXX- 
2002','YYYY-1999','YYYY-2000'),
                     Company = c('XXXX','XXXX','XXXX','XXXX','YYYY','YYYY'),
                     Year = c(1999, 2000, 2001, 2002, 1999, 2000),
                     Acquiror.size = c(500,500,500,1000,1500,1500))

    ID      Company Year Acquiror.size
 XXXX-1999    XXXX 1999           500
 XXXX-2000    XXXX 2000           500
 XXXX-2001    XXXX 2001           500
 XXXX-2002    XXXX 2002          1000
 YYYY-1999    YYYY 1999          1500
 YYYY-2000    YYYY 2000          1500

在第一步中,我需要为交易数据框架创建新列,其中包含以下信息:a)收单方和目标方的相对大小; b)然后按相对大小权衡Same.country和Relatedness列:

ID       Company Year   Target.size  Rel.size Same.country weighed.Same.country Relatedness weighed.Relatedness
XXXX-2000    XXXX 2000          50    0.100        1          0.100                  3                0.30
XXXX-2000    XXXX 2000           5    0.010        0          0.000                  2                0.02
XXXX-2001    XXXX 2001          50    0.100        0          0.000                  0                0.00
XXXX-2002    XXXX 2002           5    0.005        1          0.005                  2                0.01
YYYY-2000    YYYY 2000         150    0.100        1          0.100                  1                0.10
YYYY-2000    YYYY 2000          75    0.050        0          0.000                  1                0.05

我很难构造Rel.size列,因为获取方尺寸的输入来自另一个数据框,该数据框的格式与获取数据框的格式不同

最后一步是在财务数据框架中创建新列,其中包括:a)每年的交易次数,b)过去三年的交易次数,c)加权后相同交易国家的平均值前三年和d)三年内交易的加权关联度平均值:

ID          Company Year Acquiror.size No.of.Transactions Trans.sum.3.year ave.weighed.same.country ave.weighed.relatedness
XXXX-1999    XXXX 2000           500                  0               NA                       NA                      NA
XXXX-2000    XXXX 2000           500                  2               NA                       NA                      NA
XXXX-2001    XXXX 2001           500                  1                3     0.033333333333333333       0.106666666666667
XXXX-2002    XXXX 2002          1000                  1                4                  0.02625                  0.0825
YYYY-1999    YYYY 2000          1500                  0               NA                       NA                      NA
YYYY-2000    YYYY 2000          1500                  2               NA                       NA                      NA

到目前为止,我已经成功地构建了No.of.Transactions和Trans.sum.3.year列,但是我在寻找正确的方法来计算加权列的平均值方面遇到了困难。

预先感谢您,感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

@gatsky建议,此处使用的最佳软件包是dplyr。如果我正确理解您要执行的操作,则应为代码。交易的额外数量也可以通过mutate添加。请注意,您在不同的地方调用了与“跨界”和“ Same.country”相同的列。

library(dplyr)
newtransactions <- transactions %>%
      left_join(financials, by = c("ID", "Company","Year")) %>%
      mutate(Rel.size=round(Target.size/Acquiror.size, digits = 2),
      weighed.Same.country = case_when(Same.country == 1 ~ round(Rel.size, digits = 2),
                                       TRUE ~ 0),
      weighed.Relatedness = round(Rel.size*Relatedness, digits=2))