Я пытаюсь сгенерировать новые столбцы в таблице из результатов функции, которая принимает в качестве входных данных несколько существующих столбцов этой таблицы плюс пользовательские данные. В качестве упрощенного примера я хотел бы использовать эту функцию
addup <- function(x, y, z){x + y + z}
и используйте его для добавления чисел в существующие столбцы в этой таблице ...
set.seed(1)
(tib <- tibble(num1 = sample(12), num2 = sample(12)))
# A tibble: 12 x 2
num1 num2
<int> <int>
1 8 5
2 6 3
3 7 7
4 3 11
5 1 2
6 2 1
7 11 6
8 10 9
9 4 8
10 9 12
11 5 10
12 12 4
... вместе с пользовательским вводом. Например, если пользователь определяет вектор
vec <- c(3,6,4)
Я хотел бы создать один новый столбец для элемента в vec
, добавив сопоставленные значения с пользовательскими значениями ввода.
В этом случае желаемый результат будет выглядеть примерно так:
# A tibble: 12 x 5
num1 num2 `3` `6` `4`
<int> <int> <dbl> <dbl> <dbl>
1 5 7 15 18 16
2 8 2 13 16 14
3 7 9 19 22 20
4 1 11 15 18 16
5 3 3 9 12 10
6 9 12 24 27 25
7 6 6 15 18 16
8 10 10 23 26 24
9 11 4 18 21 19
10 12 5 20 23 21
11 4 1 8 11 9
12 2 8 13 16 14
Если бы я знал vec
заранее, я мог бы достичь этого с помощью
tib %>%
mutate("3" = map2_dbl(num1, num2, ~addup(.x, .y, 3)),
"6" = map2_dbl(num1, num2, ~addup(.x, .y, 6)),
"4" = map2_dbl(num1, num2, ~addup(.x, .y, 4)))
но так как длина vec может варьироваться, я не знаю, как это обобщить. Я нашел этот ответ повторное изменение в tidyverse , но там функции повторяются над существующими столбцами вместо использования нескольких существующих столбцов для сопоставления.
Есть идеи?