2016-10-28 122 views
0

我有两个数据帧中的一个与量以及一个价格[R乘以两个数据列帧

Quantities <- data.frame(region=c("US","US","EU","China","EU"),a = 1:5, b = 5:9, c=8:12) 
prices_frame <- data.frame(region=c("US","EU","China"),a = c(10,20,30), b = c(10,20,30), c=c(1000,2000,100)) 

数量

region a b c 
1  US 1 5 8 
2  US 2 6 9 
3  EU 3 7 10 
4 China 4 8 11 
5  EU 5 9 12 

价格

region a b c 
1  US 10 10 1000 
2  EU 20 20 2000 
3 China 30 30 100 

有没有一种方式,我可以快速地将数量与匹配区域的价格相乘,而无需遍历整个数量帧? 最佳亚历

+0

你可以'merge'(左连接价格),然后乘 – Batanichek

回答

2

我们可以使用match

假设你列abc在相同的顺序中都dataframes

Quantities[-1] * prices_frame[match(Quantities$region, prices_frame$region), -1] 


# a b  c 
#1 10 50 8000 
#2 20 60 9000 
#3 60 140 20000 
#4 120 240 1100 
#5 100 180 24000 

要获得相同的列数,

数据帧
new_df <- cbind(Quantities[1], 
    Quantities[-1] * prices_frame[match(Quantities$region, prices_frame$region), -1]) 

# region a b  c 
#1  US 10 50 8000 
#2  US 20 60 9000 
#3  EU 60 140 20000 
#4 China 120 240 1100 
#5  EU 100 180 24000 
0

我们可以在中使用加入

library(data.table) 
nm1 <- names(Quantities)[-1] 
setDT(Quantities)[prices_frame, (nm1) := Map(`*`, mget(nm1), 
       mget(paste0("i.", nm1))) , on = "region"] 
Quantities 
# region a b  c 
#1:  US 10 50 8000 
#2:  US 20 60 9000 
#3:  EU 60 140 20000 
#4: China 120 240 1100 
#5:  EU 100 180 24000