带有if语句的慢速嵌套循环的替代方法?

时间:2019-04-10 19:36:30

标签: r if-statement nested-loops

我有两个大数据帧(具有7038行的df和具有14076行的df2)。 如果某些字段相同,我想比较它们并添加值。

我尝试了带有if语句的嵌套for循环,但要花几个小时才能完成。

df:

Date       HomeTeam     AwayTeam      FTR   GoalScoreHome GoalScoreAway
   <date>     <chr>           <chr>         <chr> <chr>         <chr>        
 1 1995-08-18 For Sittard     PSV Eindhoven A     NA            NA           
 2 1995-08-19 Go Ahead Eagles Groningen     D     NA            NA           
 3 1995-08-19 Roda JC         Heerenveen    D     NA            NA           
 4 1995-08-19 Willem II       Sparta        H     NA            NA           
 5 1995-08-20 Ajax            Utrecht       H     NA            NA           
 6 1995-08-20 Feyenoord       Vitesse       H     NA            NA           
 7 1995-08-20 Graafschap      Nijmegen      A     NA            NA           
 8 1995-08-20 Volendam        Twente        A     NA            NA           
 9 1995-08-20 Waalwijk        NAC Breda     D     NA            NA           
10 1995-08-23 Groningen       For Sittard   H     NA            NA   

df2:

Round Date        Team   GDPerGame      PointsPerGame      GoalScore5.2
1     1 1995-08-20 Ajax          4             3           NA
2     2 1995-08-25 Ajax          6             3           NA
3     3 1995-09-10 Ajax          4             3           NA
4     4 1995-09-17 Ajax          4             3           NA
5     5 1995-09-20 Ajax          4             3           NA
6     6 1995-09-24 Ajax          1             3           22

我正在使用以下循环:

for (i in 1:nrow(df)) {
  for (j in  1:nrow(df2)) {
    if(df$HomeTeam[i] == df2$Team[j] & df$Date[i] == df2$Date[j] ){

      df$GoalScoreHome[i] = df2$GoalScore5.2[j]
    }
    else if(df$AwayTeam[i] == df2$Team[j] & df$Date[i] == df2$Date[j]){
      df$GoalScoreAway[i] = df2$GoalScore5.2[j]
    }

  }

}

这按预期工作,但是正如我之前所说的那样,它太慢了

我发现了嵌套循环的一些替代方法,但其中没有if语句。有人知道更好,更快的替代方法吗?

2 个答案:

答案 0 :(得分:0)

我建议调查merge命令。

答案 1 :(得分:0)

似乎是合并问题。您可以先按日期合并两个数据集,然后再按团队合并。如果您熟悉SQL,则也可以使用RSQLite软件包来完成,它甚至更快。