df1 <- data.frame(ID = c(1,1,2,2,3,3,4,4,5,5), A = c(1,0,5,1,1,NA,0,3,2,7), B = c(2,3,NA,3,4,NA,1,0,5,NA)) df2 <- data.frame(ID = c(1,2,3,4,5), A = c(1,6,1,3,9), B = c(5,3,4,1,5)) m <- match(df1$ID, df2$ID) sel <- c("A", "B") for (i in 1:nrow(df1)) { df1[i,sel] <- round(df1[i,sel]/df2[m[i],sel], 2) }> df1ID A B 1 1 1.00 0.4 2 1 0.00 0.6 3 2 0.83 NA 4 2 0.17 1.0 5 3 1.00 1.0 6 3 NA NA 7 4 0.00 1.0 8 4 1.00 0.0 9 5 0.22 1.0 10 5 0.78 NA>-- Best, GG [[alternative HTML version deleted]]