0

私は2つのデータフレームを持っています:

df1 <- data.frame( pt = c("pt1153", "pt1153", "pt1153", "pt1154", "pt1155", "pt1156"),
                   phys = c("p10", "p616", "p850", "p899", "p709", "p892"))

df2<- data.frame( sender = c("p10", "p10", "p100", "p100", "p102", "p103"),
                  s.type = c(11,11,21,21,11, 21),
                  receiver = c("p616", "p850", "p235", "p388", "p596", "p696"),
                  r.type = c(21,31,11,11,31,31),
                  shared.pts = c(1,1,1,1,1,1) )

で終わりたい

  sender s.type receiver r.type shared.pts pts
    p10    11    p616     21      1        p1153
    p10    11    p850     31      1        p1153

しかし、私はそれを行う方法を理解できません。マージしてから ddply を使用しようとしましたが、うまくいきませんでした。私もapplyで遊んでみましたが、どの関数を作るべきかわかりませんでした。

DFS をマージするだけでは十分ではありません。df1の列「pts」のメンバーを共有するそれぞれに基づいてそれらをマージする必要があります

問題を再現できないようですが、マージを使用すると、次のようになります。

     p.sender.id p.receiver.type Source.total.pts p.receiver.id p.sender.type Target.total.pts shared.pts patient.id
1          p10              21                6          p616            11              3          1     pt2439

2          p10              21                6          p616            11                3          1     pt1870

3          p10              21                6          p616            11                3          1     pt1153

4          p10              21                6          p616            11              3          1       pt64
5          p10              21                6          p616            11              3          1     pt1626
6          p10              21                6          p616            11              3          1      pt941
7          p10              31                6          p850            11             10          1     pt2439
8          p10              31                6          p850            11             10          1     pt1870
9          p10              31                6          p850            11             10          1     pt1153
10         p10              31                6          p850            11               10          1       pt64

p10 と p616 が 1 つのポイントのみを共有する場合。pt1153

4

2 に答える 2

2

マージが機能するはずだと思います!!

merge(df2, df1, by.x = "sender", by.y = "p")
  sender receiver   pts
1    p10     p850 pt800
2    p55      p90  pt11
于 2012-06-28T15:07:23.673 に答える
1

これにより、ほとんどの方法でそこにたどり着きます。列だけが同じ順序ではありません。

ddply(df1,.(pts),function(x){ x$p })
    pts  V1   V2
1  pt11 p55  p90
2 pt800 p10 p850

しかし、私は使用しただけdf1なので、質問から何かを除外したかどうか、つまり実際のデータでこの戦略を採用できないかどうかについては疑わしいです。

于 2012-06-28T15:03:51.983 に答える