我有两个数据帧。第一个包含有关收购的信息:
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列,但是我在寻找正确的方法来计算加权列的平均值方面遇到了困难。
预先感谢您,感谢您的帮助!
答案 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))