Один параметр - match
из base R
, чтобы получить индекс row/column
, используйте его для извлечения значений из второго набора данных, чтобы создать столбец «дождь» в первом наборе данных
df1$rain <- df2[-1][cbind(match(df1$date, df2$date),
match(df1$Stadium, names(df2)[-1]))]
Или другой вариант - преобразовать второй набор данных в «длинный» формат и затем выполнить объединение
library(dplyr)
library(tidyr)
df2 %>%
pivot_longer(cols = -date, names_to = 'Stadium', values_to = 'rain') %>%
right_join(df1)
# A tibble: 4 x 3
# date Stadium rain
# <chr> <chr> <dbl>
#1 2019-01-01 Yankee 0
#2 2019-01-01 Dodger 0.1
#3 2019-01-01 Coors 0.1
#4 2019-01-02 Dodger 0
data
df1 <- structure(list(date = c("2019-01-01", "2019-01-01", "2019-01-01",
"2019-01-02"), Stadium = c("Yankee", "Dodger", "Coors", "Dodger"
)), class = "data.frame", row.names = c(NA, -4L))
df2 <- structure(list(date = c("2019-01-01", "2019-01-02", "2019-01-03"
), Yankee = c(0L, 0L, 0L), Dodger = c(0.1, 0, 0.2), Coors = c(0.1,
0, 0.1)), class = "data.frame", row.names = c(NA, -3L))