R-根据多个条件匹配2个数据帧中的值(当查找ID的顺序是随机的时)

普罗米修斯

嗨,我有两个数据框:

df1 = data.frame(PersonId1=c(1,2,3,4,5,6,7,8,9,10,1),PersonId2=c(11,12,13,14,15,16,17,18,19,20,11),
             Played_together = c(1,0,0,1,1,0,0,0,1,0,1),
             Event=c(1,1,1,1,2,2,2,2,2,2,2),
             Utility=c(20,-2,-5,10,30,2,1,.5,50,-1,60))


df2 = data.frame(PersonId1=c(11,15,9,1),PersonId2=c(1,5,19,11),
             Played_together = c(1,1,1,1),
             Event=c(1,2,2,2))

df1如下所示:

      PersonId1 PersonId2 Played_together Event Utility
1          1        11               1     1    20.0
2          2        12               0     1    -2.0
3          3        13               0     1    -5.0
4          4        14               1     1    10.0
5          5        15               1     2    30.0
6          6        16               0     2     2.0
7          7        17               0     2     1.0
8          8        18               0     2     0.5
9          9        19               1     2    50.0
10        10        20               0     2    -1.0
11         1        11               1     2    60.0

和df2看起来像这样:

  PersonId1 PersonId2 Played_together Event
1        11         1               1     1
2        15         5               1     2
3         9        19               1     2
4         1        11               1     2   

请注意,df2不只是df1 $ played_together == 1(例如,在df2中不存在PlayerId1 = 4且PlayerId2 = 14。

还要注意,尽管df2是df1的子集,但个人在df2中出现的顺序是随机的。例如,在第1行的df1中,我们看到事件1的playerid1 = 1和playerId2 =11。但是在第1行的df2中,我们看到了事件1的playerid1 = 11和playerId2 =1。这两种情况是完全相同的,我想df1df2查找Utility的值合并必须针对每个事件进行。最终输出应如下所示:

  PersonId1 PersonId2 Played_together Event Utility
1        11         1               1     1      20
2        15         5               1     2      30
3         9        19               1     2      50
4         1        11               1     2      60

我知道R中存在合并功能,但是当查询ID可能显示为随机值时,我不知道该怎么办。如果有人可以帮助我一点,将不胜感激。提前致谢。

亚当·沃纳

这是我为您准备的:

    library(dplyr)
    rbind(left_join(df2, df1, 
          by = c("PersonId2" = "PersonId1", "PersonId1" = "PersonId2", 
            "Played_together" = "Played_together", "Event" = "Event")),
          left_join(df2, df1, 
                     by = c("PersonId1" = "PersonId1", "PersonId2" = "PersonId2", 
         "Played_together" = "Played_together", "Event" = "Event"))) %>%
          filter(!is.na(Utility))

基本上,您的数据有时似乎已经失去了personid。我们可以将两个联接绑定在一起,然后过滤出具有实用程序的行NA

您的输出如下所示:

    PersonId1 PersonId2 Played_together Event Utility
1        11         1               1     1      20
2        15         5               1     2      30
3         9        19               1     2      50
4         1        11               1     2      60

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在R中:当两个条件之间的条件匹配时,用另一个数据帧的值替换一个数据帧列的值

R中2个数据帧的时间值之间的条件合并

R-使用多个标识符匹配值(当查找ID的顺序随机时)

根据时间范围从R中的另一个数据帧更改ID?

如何使用R根据匹配查找数据帧替换数据帧的多个列中的因子水平

根据条件验证R中两个数据帧之间的列中的值

根据R中某个值之上的每一行从一个数据帧创建多个数据帧

根据R中的条件乘并替换数据帧中的值

根据R中另一数据框中的条件值来匹配/子集一个数据框

如何从R中具有多个条件的一个数据帧创建多个数据帧

根据R中的列名称将一个数据帧拆分为多个数据帧

根据来自R中不同大小的数据帧的多个条件匹配值

根据R中的两个匹配条件,将值从一个数据帧添加到另一个数据帧

在R中的多个数据帧中查找每个像元中的最大值

避免在R中嵌套for循环,在多个条件下跨多个数据帧进行匹配

在R中进行多次匹配后如何从2个数据帧中乘列值

R:根据条件(不同大小的数据帧),从另一个数据帧的列中为列分配值

创建仅包含R中2个数据帧中匹配数据的数据帧

R-将一个数据帧中的值与另一个数据帧中的多个值进行匹配

基于两个数据帧 R 中多个条件的特定列的值

使用 R 中另一个数据帧的其他匹配 ID 替换数据帧中的值

如何将一个数据帧作为子集(完整)查找或匹配到 R 中的另一个数据帧?

如何在 R 中匹配具有多个 ID 的多个数据帧

R:如何根据特定条件将值从多个数据帧传输到另一个数据帧?

根据R中另一个数据帧中给出的条件,用NA替换数据帧中的多个值

比较 R 中多个数据帧的唯一值

满足 R 中的条件时从另一个数据帧计算 z 分数

用R替换另一个数据帧中给定多个条件的数据帧值

在 R 中,当有多个列表需要匹配时,如何组合两个数据帧?