更快嵌套循环R

时间:2016-11-14 14:54:17

标签: r for-loop

我想加快我在R的解决方案。

我'有两个Dataframes,让我们说: df_one:

A | B | C | D | same
1 | 3 | 2 | 4 | NA
6 | 5 | 1 | 3 | NA
5 | 3 | 7 | 3 | NA
3 | 4 | 8 | 3 | NA

和df_two:

A | B 
1 | 3
6 | 2 
5 | 3 

如果A列和B列中的实例相同(或者是.5的序列),我想要1,否则在df_one(df_one $ same)的额外列中为0。

我使用以下代码完成了此操作:

df_one$same <- NA

for (i in 1:nrow(df_one)) {
  for (j in 1:nrow(df_two)) {
    distance <- seq(df_two[j, 2]-.5, df_two[j, 2]+.5, by = .1)
    print(i)
    if ((df_one[i, 1] == df_two[j, 1]) & (df_one[i, 2] %in% df_two[i, 2])){
      df_one[i, 5] <- 1
      break}
    else{df_one[i, 5] <- 0}
  }
}

任何人都可以帮我解决更快的问题吗?

1 个答案:

答案 0 :(得分:4)

我要求的想法的更快解决方案是使用left_join中的dplyr并明确检查匹配项。

left_join(df_one, df_two, by = "A") %>%
  mutate(same = B.x == B.y)

给出

  A B.x C D  same B.y
1 1   3 2 4  TRUE   3
2 6   5 1 3 FALSE   2
3 5   3 7 3  TRUE   3
4 3   4 8 3    NA  NA