как умножить несколько столбцов DF - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть df с количеством столбцов.Я хочу умножить каждый столбец, используя фиксированную константу.Я ищу наилучшую возможную стратегию для достижения этой цели, используя purrr (я все еще пытаюсь обдумать lamp и т. Д.)

library(tidyverse)
library(lubridate)

df1 <- data.frame(
               date = ymd(c("2019-02-01", "2019-02-02", "2019-02-03", "2019-02-04",
                        "2019-02-05")),
                  x = c(1, 2, 3, 4, 5),
                  y = c(2, 3, 4, 5, 6),
                  z = c(3, 4, 5, 6, 7)
       ) 

Константы для умножения каждого столбца имеют видследующим образом:

c(10, 20, 30)

Это вывод, который я ожидаю:

data.frame(
        date = ymd(c("2019-02-01", "2019-02-02", "2019-02-03", "2019-02-04",
                 "2019-02-05")),
           x = c(10, 20, 30, 40, 50),
           y = c(40, 60, 80, 100, 120),
           z = c(90, 120, 150, 180, 210)
)

1 Ответ

0 голосов
/ 27 февраля 2019

Мы можем использовать map2 из purrr (часть tidyverse) для достижения этого.

df1[2:4] <- map2(df1[2:4], c(10, 20, 30), ~.x * .y)
df1        
#         date  x   y   z
# 1 2019-02-01 10  40  90
# 2 2019-02-02 20  60 120
# 3 2019-02-03 30  80 150
# 4 2019-02-04 40 100 180
# 5 2019-02-05 50 120 210

Базовый эквивалент R равен mapply.

df1[2:4] <- mapply(FUN = function(x, y) x * y, df1[2:4], c(10, 20, 30), SIMPLIFY = FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...