我有两个大数据帧(具有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语句。有人知道更好,更快的替代方法吗?
答案 0 :(得分:0)
我建议调查merge命令。
答案 1 :(得分:0)
似乎是合并问题。您可以先按日期合并两个数据集,然后再按团队合并。如果您熟悉SQL,则也可以使用RSQLite软件包来完成,它甚至更快。