Создать несколько новых переменных, которые рассчитываются из существующих переменных - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь выяснить, как создать несколько новых переменных, которые рассчитываются с использованием переменных, которые в настоящее время находятся в моем наборе данных

Вот некоторые примеры данных

library(tidyverse)

df <- data.frame(
 a1 = rnorm(100),
 a2 = rnorm(100),
 b1 = rnorm(100),
 b2 = rnorm(100),
 c1 = rnorm(100),
 c2 = rnorm(100)
)

По сути, я хочу создать новую переменную для каждой пары a, b, c, которая делит a1 на a2, b1 на b2 и т. Д. Например:

df <- df %>%
  mutate(a3 = a1/a2)

Переменные в моем наборе данных не соответствуют этим соглашениям об именах, поэтому я чувствую, что мне нужно присваивать имена векторам:

numerators <- c('a1', 'b1', 'c1')
denominators <- c('a2', 'b2', 'c2') 

И тогда создание новой переменной будет следовать базовому соглашению

mutate(newvars = numerators/denominators)

Но я застрял в том, как на самом деле это сделать. Любая помощь будет высоко ценится - спасибо!

1 Ответ

0 голосов
/ 14 ноября 2018

Здесь есть опция split набора данных в list data.frame на основе шаблона имени столбца, затем reduce его путем деления по элементам на каждую пару столбцов в каждом из набора данных и связывание сисходный набор данных

library(tidyverse)
df %>% 
   split.default(sub("\\d+", "", names(.))) %>% 
   map_df(reduce, `/`) %>% 
   rename_all(~paste0(., 3)) %>% 
   bind_cols(df, .)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...