Создание коэффициента конверсии воронки в R с учетом столбца NA - PullRequest
2 голосов
/ 11 марта 2020

У меня есть следующий набор данных:

library(tidyverse)
dataset <- data.frame(id = c(121,122,123,124,125), 
                      segment = c("A","B","B","A",NA), 
                      Web = c(1,1,1,1,1),
                      Tryout = c(1,1,1,0,1), 
                      Purchase = c(1,0,1,0,0), 
                      stringsAsFactors = FALSE)

Применение некоторых преобразований, возможно иметь воронку преобразования (спасибо г-ну Акруну за этот код):

dataset <- dataset %>% 
  select(-id) %>%
  pivot_longer(cols = -segment) %>%
  group_by(name) %>%
  mutate(Total = sum(value)) %>% 
  group_by(name, segment, Total) %>%
  mutate(n = sum(value)) %>% 
  ungroup  %>%
  select(-value) %>% 
  distinct %>%
  pivot_wider(names_from = segment, values_from = n)

для эта таблица:

name     Total     A     B  `NA`
Web         10     5     3     2
Tryout       8     3     3     2
Purchase     5     2     2     1

Теперь соотношение воронок определяется операциями со строками, например, Попробовать / Интернет, Покупка / Проба, Покупка / Интернет

name             Total   A       B        `NA`
Tryout/web        0.8    0.6     1         1
Purchase/Tryout   0.625  0.667   0.667     0.5
Purchase/web       0.5   0.4     0.667     0.5

Я пытался сделать это строкой за строкой, а затем связывать за строкой с этим кодом:

dataset_row1 <- dataset[2,-1]/dataset[1,-1]

Но я получаю сообщение об ошибке, Error in FUN(left, right) : non-numeric argument to binary operator

Пожалуйста, любые советы будут высоко оценены.

1 Ответ

2 голосов
/ 11 марта 2020

Эта ошибка вызвана тем, что вы пытаетесь вычислить с нечисловым столбцом c. Сам по себе dataset_row1 <- dataset[2,-1]/dataset[1,-1] работает, но я не вижу вашего полного кода связывания строк и поэтому не могу сказать вам, какая часть в вашем коде вызвала ошибку. Вот рабочее решение, использующее mutate_at

library(dplyr)

new_dataset <- dataset %>%
  mutate_at(c('Total','A','B','NA'),~./lag(.))

, если вам нужно разделить только первую строку вместо предыдущей строки

new_dataset <- dataset %>%
  mutate_at(c('Total','A','B','NA'),~./first(.))

На основе предложения @Manu, чтобы сделать эту работу с другим номером строки nth() следует использовать

row_nr = 1

new_dataset <- dataset %>%
  mutate_at(c('Total','A','B','NA'),~./nth(.,row_nr))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...