Я хочу разделить каждый столбец в списке a на соответствующий столбец в списке b, а затем вернуть отношение как новый столбец в уже существующем кадре данных.
Я нашел общий способ сделать этоиспользуя следующий код (используя пакет diamonds в качестве примера):
library(tidyverse)
results <- list(
lst("depth", "table", "price"),
lst("x", "y", "z")
) %>%
pmap_dfc(~diamonds %>% mutate(var = !!sym(.x)/!!sym(.y))) %>%
select(c(1:ncol(diamonds)), matches("var")) %>%
rename(new1 = var,
new2 = var1,
new3 = var2)
Моя проблема заключается в том, что это дублирует весь фрейм данных для каждой новой переменной, которую я создаю, и мне затем нужно отменить выбор этих дублированных столбцов,Это не проблема здесь, но может быть, когда мне нужно сделать это с 1) большим количеством переменных и / или 2) большими кадрами данных.
Любой совет, как только создавать новые столбцы и связывать их с фреймом данных diamond (т.е. избегать использования функции select
в моем коде)?
РЕДАКТИРОВАТЬ
Желаемый результат - это то, что в настоящее время находится в объекте results
выше (и вставлен ниже) - процесс попадания в мой код просто кажется мне неправильным.
> results
# A tibble: 53,940 x 13
carat cut color clarity depth table price x y z new1 new2 new3
<dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43 15.6 13.8 134.
2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31 15.4 15.9 141.
3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31 14.0 16.0 142.
4 0.290 Premium I VS2 62.4 58 334 4.2 4.23 2.63 14.9 13.7 127.
5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75 14.6 13.3 122.
6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48 15.9 14.4 135.
7 0.24 Very Good I VVS1 62.3 57 336 3.95 3.98 2.47 15.8 14.3 136.
8 0.26 Very Good H SI1 61.9 55 337 4.07 4.11 2.53 15.2 13.4 133.
9 0.22 Fair E VS2 65.1 61 337 3.87 3.78 2.49 16.8 16.1 135.
10 0.23 Very Good H VS1 59.4 61 338 4 4.05 2.39 14.8 15.1 141.
# ... with 53,930 more rows