R:连接/分配两个重叠数据集的值

时间:2011-08-06 07:11:37

标签: r compare dataframe intersection overlap

我需要你心爱的帮助......

我有两个数据集。一个指定人员名称为tradeIDs,另一个人员ID指定(同一种类型)tradeIDs。我想知道哪个人有哪个ID。

数据:

personID    tradeID     Name    tradeID
123         10      |   Bob     7
123         5       |   Bob     8
210         1       |   Jack    3
210         7       |   Jack    11
210         8       |   Paul    5
988         11      |   Paul    10
988         8       |

问题:

我想找出tradeID的重叠/交集,所以我知道哪个名称属于哪个personID。

结果 (应如下所示)

personID    Name
123         Paul
210         Bob
988         Jack

难点:

  • 重叠具有不同数量的元素(Bob& 210)
  • TradeID与不同的personID和名称(tradeID 8)
  • 有多个连接
  • 重叠不一定是100%(Jack& 988)

创意&试验

  • 尝试:数据框架比较库&&重塑库(没有提供任何有用的方法)
  • 想法:创建personID和名称&&的向量比较矢量(不知道如何制作矢量)&&连接具有最高重叠的向量

有没有办法解决这个问题,例如通过数据框架比较?

非常感谢你的帮助!!!

1 个答案:

答案 0 :(得分:0)

我要做的是:

  1. 将两者合并在一起
  2. 在每个名称中进行比较,看它是否匹配多个personID(不好!)
  3. 如果所有内容都已检出,请删除重复项
  4. 类似于:

    datA <- data.frame(personID=c( 123,123,210,210,210,988,988 ),tradeID=c( 10,5,1,7,8,11,8) )
    datB <- data.frame(name=c("B","B","J","J","P","P"), tradeID=c( 7,8,3,11,5,10 ) )
    mgd <- merge(datA,datB)
    library(taRifx)
    stopifnot( all( by(mgd$personID,as.factor(mgd$name),distinct) <=1 ) )
    result <- subset(mgd, !duplicated(mgd$name),select=c(-tradeID) )
    

    这在stopifnot上失败,因为Bob与personID 210和988相关联,这可能是你的示例数据中的拼写错误....如果删除它,它运作良好:

    datA[7,"tradeID"] <- 12
    mgd <- merge(datA,datB)
    result <- subset(mgd, !duplicated(mgd$name),select=c(-tradeID) )
    result
      personID name
    1      123    P
    2      210    B
    5      988    J