2012-12-16 41 views
2

我有一個數據幀a,用A,B,C是單獨的條目簡單加入數據幀的計算中的R

Source Target N 
A B 100 
A D 200 

我有條目另一個數據幀b屬性

Name Rate1 Rate2 
A 0.1 0.2 
B 0.2 0.3 

我想計算a中的新列Flow,因爲它是根據Flow = a$N * b[Name == a$Source]$Rate1計算的行。我試圖按行使用apply,但我感覺它很慢。有更快的方法嗎?

回答

3

這是一個相當表現力的解決方案,非常類似於你試過代碼:

> a$Flow <- a$N*b$Rate1[ match(a$Source, b$Name) ] 
> a 
    Source Target N Flow 
1  A  B 100 10 
2  A  D 200 20 

match函數是merge%in%的基礎。這對構建索引向量來從替代選擇中特別有用。

+0

我認爲這是我尋找的。謝謝! – Seen

4

我不知道你有申請試過,但這裏有合併的答案,改造

transform(merge(a,b,by.x = 'Source',by.y ='Name'),flow = N*Rate1) 

    Source Target N Rate1 Rate2 flow 
1  A  B 100 0.1 0.2 10 
2  A  D 200 0.1 0.2 20