跨多个表的多个列的操作

Operations on multiple columns accross many tables

我有两个表(dt1、dt2)。 dt2 包含与 dt1 相同的变量名称。 对于 dt1 中的每个变量,我想将它与 dt2 中的值相乘。 在下面的示例中,dt1 中的 x 将乘以 4,y 将乘以 7。 如何快速做到这一点? 谢谢

  set.seed(123)
  dt1 <- data.frame(x = sample(1:10, 10, TRUE), y = sample(1:10, 10, TRUE) )
  dt1
  dt2 = data.frame (names = c("x", "y"), values = c(4, 7))
  dt2

你可以试试sweep

> sweep(dt1, 2, dt2$values[match(dt2$names, names(dt1))], "*")
    x  y
1  12 35
2  12 21
3  40 63
4   8 63
5  24 63
6  20 21
7  16 56
8  24 70
9  36 49
10 40 70

> dt1[] <- t(t(dt1) * dt2$values[match(dt2$names, names(dt1))])

> dt1
    x  y
1  12 35
2  12 21
3  40 63
4   8 63
5  24 63
6  20 21
7  16 56
8  24 70
9  36 49
10 40 70

purrr风格

map2_df(dt1, dt2 %>% pivot_wider(names_from = names, values_from = values), ~.y * .x)

# A tibble: 10 x 2
       x     y
   <dbl> <dbl>
 1    12    35
 2    12    21
 3    40    63
 4     8    63
 5    24    63
 6    20    21
 7    16    56
 8    24    70
 9    36    49
10    40    70