Давайте начнем с этого фрейма данных. Давайте назовем их temp
и ppt
столбцами для столбцов, начинающихся с t and p
соответственно.
df <- data.frame(id = 1:4, area = rnorm(4, 123), t_p25 = rnorm(4, 2), t_p30 = rnorm(4, 0.5),
t_m25 = rnorm(4, 3), p1 = rnorm(4, 7), p_1 = rnorm(4, 10), p2 = rnorm(4, 3), p_2 = rnorm(4, -1))
Моя конечная цель - создать столбец W
, который рассчитывается как W = temp * ppt * area * {other columns as well}
.
Например:
W_t_p25_p1 = t_p25 * p1 * area
W_t_p25_p_1 = t_p25 * p_1 * area
W_t_m25_p1 = t_m25 * p1 * area
W_t_m25_p_1 = t_m25 * p_1 * area
и т. Д.
Вот как они мне нужны ::
id area W_t_p25_p1 W_p_25_p_1 W_p_25_p2 W_p_25_p_2 W_t_p30_p1 W_t_p30_p_1 W_p_25_p2 W_p_25_p_2 ... and so on
# ## # # # # # # # # and so on
Было бы утомительно делать это вручную. Я пытался решить это с mutate_at
, но .vars - это ограничение. Если бы только это можно было сделать ::
df %>% mutate_at( .vars1 = colnames(.)[grep("^t_", colnames(.)],
.vars2 = colnames(.)[grep("^p", colnames(.)],
.funs = calc.W( .vars1, .vars2 , area)
)
Есть ли более простой способ сделать что-то подобное?