2

私はデータフレームを持っていますa、A、B、Cは別々のエントリです

Source Target N
A B 100
A D 200

bエントリの属性用に別のデータフレームがあります

Name Rate1 Rate2
A  0.1 0.2
B  0.2 0.3

に基づいて行が計算されるため、で新しい列Flow を計算したいと思います。行ごとに使ってみましたが、遅い気がしました。より速い方法はありますか?aFlow = a$N * b[Name == a$Source]$Rate1apply

4

2 に答える 2

4

あなたがapplyで何を試したかはわかりませんが、ここではマージと変換を使用した回答を示します

  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
于 2012-12-16T05:20:11.313 に答える
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%

于 2012-12-16T06:51:15.500 に答える