В baseR вы можете сделать
df1 / split(df2$value, names(df1))
# A B C D
#1 0.4 0.80000000 0.08333333 0.3
#2 0.3 0.33333333 0.25000000 0.4
#3 0.6 0.06666667 0.75000000 0.2
split(df2$value, names(df1))
возвращает список, отсортированный по names(df1)
:
split(df2$value, names(df1)
#$A
#[1] 10
#
#$B
#[1] 15
#
#$C
#[1] 12
#
#$D
#[1] 20
df1
затем делится по столбцам значениями этого списка.
данные
df1 <- structure(list(A = c(4L, 3L, 6L), B = c(12L, 5L, 1L), C = c(1L,
3L, 9L), D = c(6L, 8L, 4L)), class = "data.frame", row.names = c(NA,
-3L))
df2 <- structure(list(id = c("A", "B", "C", "D"), value = c(10L, 15L,
12L, 20L)), class = "data.frame", row.names = c(NA, -4L))