Создать новый столбец на основе условий в других столбцах - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть набор данных клиентов B2B, в котором мы хотим измерить процесс регистрации наших клиентов после предоставления им доступа в наш интернет-магазин.Компания может иметь много пользователей, которым был предоставлен доступ.Я хотел бы создать еще один столбец под названием «Включение» с условным «Дата первого входа в систему», чтобы, если пользователь из какой-либо конкретной компании вошел в систему впервые, мы бы классифицировали эту компанию или клиента как встроенные со значением«Да», иначе «Нет».И это означает, что они еще не вошли в систему.Я не уверен, как подойти к этому в R. Может ли кто-нибудь помочь мне, пожалуйста?^^

Пример прилагается в виде картинки:

data frame

фрейм данных с новым столбцом

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Другими словами, для данной компании, если у всех пользователей Дата первого входа в систему как «#», компания не была загружена. Это правильно?

Вы можете использовать метод разделения-применения-объединения для таких задач:

#### Data ####
 my_df <- data.frame(Company  = c("A","A","A","A","A","B","B","B","B","C","C","C","C","D","D","D","D"),
                  UserID     = c("Simon","Hans","Jane","Alex","David","Dan","Sarah","Susan","Bob","Keith",
                              "Harry","Adam","Kenneth","Denial","Henna","John","Dylan"),
                              First_Log_in_Date = c("2018-02-22","#","2018-03-07","2018-04-29","#","#","#",
                                                    "2018-05-01","2018-02-27","2018-06-08","2018-07-12",
                                                    "2018-02-21","#","#","#","#","#"))

#### Split - Apply - Combine ####
my_df %>% split(., .$Company) %>% lapply(function(company_df) {
    # "Check if any user logged in
    if(any(company_df$First_Log_in_Date != "#")) {
        company_df$onboarded <- T
        return(company_df)
    }
    company_df$onboarded <- F
    return(company_df)
}) %>% do.call(rbind, .)
0 голосов
/ 10 сентября 2018

Это то, что вы хотели ...

Первые данные для воспроизводимого отчета:

 dat <- data.frame(Company  = c("A","A","A","A","A","B","B","B","B","C","C","C","C","D","D","D","D"),
                   UserID    = c("Simon","Hans","Jane","Alex","David","Dan","Sarah","Susan","Bob","Keith",
                              "Harry","Adam","Kenneth","Denial","Henna","John","Dylan"),
                   First_Log_in_Date = c("2018-02-22","#","2018-03-07","2018-04-29","#","#","#",
                                                    "2018-05-01","2018-02-27","2018-06-08","2018-07-12",
                                                    "2018-02-21","#","#","#","#","#"), 
                   stringsAsFactors = F)

Чтобы ответить на ваш оригинальный вопрос, я бы просто использовал базовую функцию ifelse ():

dat$Onboarding <- ifelse(dat$First_Log_in_Date=="#", "NO", "YES")

И мы получаем столбец «Включение», заполненный Да или Нет, в зависимости от даты входа в систему.

Чтобы ответить на второй вопрос, основанный на вашем условии, я бы просто использовал функции пакета "dplyr":

dat <- dat %>% group_by(Company) %>% 
               mutate(onborded = ifelse(n_distinct(First_Log_in_Date) > 1, "Yes", "No"))

Мы получаем столбец результатов «Входящие», заполненный «Да» или «Нет», в зависимости от даты входа сотрудников в любую компанию группы, отличную от «#».

Таблица будет выглядеть так:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...