gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 03:12:23 25 4
gpt4 key购买 nike

嗨,我有两个数据框:

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 中的顺序是随机的。例如在 df1 在第 1 行,我们看到事件 1 的 playerid1 =1 和 playerId2 = 11。但在 df2 在第 1 行,我们看到事件 1 的 playerid1 =11 和 playerId2 = 1。这两种情况完全相同,我想查找 的值实用程序 来自 df1 df2 .每个事件都必须进行合并。最终输出应如下所示:
  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。我们可以将两个连接绑定(bind)在一起,然后过滤掉那些具有 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

关于R - 基于多个条件匹配来自 2 个数据帧的值(当查找 ID 的顺序是随机的时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51088367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com