2016-10-28 3 views
0

나는 두 개의 데이터가 R 곱 열은 프레임

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

이 방법이 있나요 수량과 하나 가격에 하나

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 

가격 프레임이 그 전체 수량을 반복하지 않고도 일치하는 지역의 가격으로 수량을 빠르게 곱할 수 있습니다. 틀? 최고의 알렉스

+0

'병합'(왼쪽 결합 가격) 후 곱할 수 있습니다. – Batanichek

답변

2

우리는 match

이 열 a, b 가정 사용할 수 c는 동일한 수의 열,

와 dataframe를 얻으려면 모두 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