Вы можете сделать это довольно легко в базе R, используя функцию слияния. Вот пример.
Имитируйте некоторые данные из вашего описания:
df1 <- expand.grid(O = letters[c(2:4,7)], date = c(1,3))
df2 <- data.frame(O = rep(letters[1:6], c(2,3,3,6,2,2)), date = rep(1:3, c(3,2,4)))
df1$krnqm <- sample(1:1000, size = nrow(df1), replace=T)
> df1
O date krnqm
1 b 1 833
2 c 1 219
3 d 1 773
4 g 1 514
5 b 3 118
6 c 3 969
7 d 3 704
8 g 3 914
> df2
O date
1 a 1
2 a 1
3 b 1
4 b 2
5 b 2
6 c 3
7 c 3
8 c 3
9 d 3
10 d 1
11 d 1
12 d 1
13 d 2
14 d 2
15 e 3
16 e 3
17 f 3
18 f 3
Теперь давайте объединим два фрейма данных описанным вами способом.
df2 <- merge(df2, df1, all.x=T)
> df2
O date krnqm
1 a 1 NA
2 a 1 NA
3 b 1 833
4 b 2 NA
5 b 2 NA
6 c 3 969
7 c 3 969
8 c 3 969
9 d 1 773
10 d 1 773
11 d 1 773
12 d 2 NA
13 d 2 NA
14 d 3 704
15 e 3 NA
16 e 3 NA
17 f 3 NA
18 f 3 NA
Итак, вы Можно видеть, что столбец krnqm в результирующем фрейме данных содержит NA для любых комбинаций «O» и «date», которые не были найдены в фрейме данных, из которого были извлечены значения krnqm. Если в вашем df1 есть другие столбцы, которые вы не хотите включать в объединение, просто слегка измените вызов объединения, чтобы использовать только те столбцы, которые вам нужны: df2 <- merge(df2, df1[,c("O", "date", "krnqm")], all.x=T)
.
Удачи!