我有两个不同长度的数据框。我想用df_cur中的CAP * currency和Go * currency的乘法来改变数据框df中的列。这应该在两个数据名的国家和年份必须相同的条件下完成。进一步来说,
#df#
国家 | 部门 | 年 | 帽 | 去 | 曝光 |
---|---|---|---|---|---|
澳大利亚 | 一个 | 2000 | 100 | 200 | 0.2 |
澳大利亚 | 乙 | 2000 | 150 | 200 | 0.3 |
澳大利亚 | C | 2000 | 160 | 160 | 0.25 |
澳大利亚 | 一个 | 2001年 | 110 | 200 | 0.25 |
澳大利亚 | 乙 | 2001年 | 140 | 190 | 0.4 |
澳大利亚 | C | 2001年 | 165 | 155 | 0.2 |
贝尔 | 一个 | 2000 | 50 | 150 | 0.1 |
贝尔 | 乙 | 2000 | 70 | 160 | 0.15 |
贝尔 | C | 2000 | 100 | 200 | 0.2 |
贝尔 | 一个 | 2001年 | 55 | 160 | 0.15 |
贝尔 | 乙 | 2001年 | 65 | 140 | 0.1 |
贝尔 | C | 2001年 | 110 | 190 | 0.3 |
#df_cur#
国家 | 年 | 货币 |
---|---|---|
澳大利亚 | 2000 | 0.58 |
澳大利亚 | 2001年 | 0.60 |
贝尔 | 2000 | 0.92 |
贝尔 | 2001年 | 0.95 |
所以,我想像这样转换 df :
#df#
国家 | 部门 | 年 | 帽 | 去 | 曝光 |
---|---|---|---|---|---|
澳大利亚 | 一个 | 2000 | 100*0.58 | 200*0.58 | 0.2 |
澳大利亚 | 乙 | 2000 | 150*0.58 | 300*0.58 | 0.3 |
澳大利亚 | C | 2000 | 160*0.58 | 160*0.58 | 0.25 |
澳大利亚 | 一个 | 2001年 | 110*0.6 | 200*0.6 | 0.25 |
澳大利亚 | 乙 | 2001年 | 140*0.6 | 190*0.6 | 0.4 |
澳大利亚 | C | 2001年 | 165*0.6 | 155*0.6 | 0.2 |
贝尔 | 一个 | 2000 | 50*0.92 | 150*0.92 | 0.1 |
贝尔 | 乙 | 2000 | 70*0.92 | 160*0.92 | 0.15 |
贝尔 | C | 2000 | 100*0.92 | 200*0.92 | 0.2 |
贝尔 | 一个 | 2001年 | 55*0.95 | 160*0.95 | 0.15 |
贝尔 | 乙 | 2001年 | 65*0.95 | 140*0.95 | 0.1 |
贝尔 | C | 2001年 | 110*0.95 | 190*0.95 | 0.3 |
我从2 个数据帧的不同大小的乘列中查看了许多答案,但对我没有任何帮助。
我的代码示例:
Country<-c("AUS","AUS","AUS","AUS","AUS","AUS", "BEL", "BEL", "BEL", "BEL", "BEL", "BEL")
Sector<-c("A","B","C","A","B","C","A","B","C","A","B","C")
Year<-c("2000", "2000", "2000", "2001", "2001", "2001", "2000", "2000", "2000", "2001", "2001", "2001")
Cap<-c(100,150,160,110,140,165,50,70,100,55,65,110)
Go<-c(200,200,160,200,190,155,150,160,200,160,140,190)
Exposion<-c(0.2,0.3,0.25,0.25,0.4,0.2,0.1,0.15,0.2,0.15,0.1,0.3)
df<-data.frame(Country,Sector,Year,Cap,Go,Exposion)
country<-c("AUS","AUS", "BEL", "BEL")
Year<-c("200","2001","2000","2001")
currency<-c(0.58, 0.6, 0.92, 0.95)
df_cur<-data.frame(country,Year,currency)
非常感谢您的宝贵时间!