0

我有两个数据框:

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 只共享一个 pt 时。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 回答