Назначьте значение 1 или 0 в зависимости от условия - PullRequest
0 голосов
/ 17 апреля 2019

У меня ежемесячные отчеты с октября по апрель, и я собрал все данные. Я отсортировал данные по UniqueID, а затем по дате.

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

1.) Если последнее вхождение определенного UniqueID не в последний месяц (апрель), тогда я хочу, чтобы переменная = 1, иначе 0.

В столбце Freq указано, сколько раз уникальный идентификатор отображается во всем наборе данных с накопленными ежемесячными отчетами.

UniqueID Date        Freq
XX343_1  02/01/2019  3
XX343_1  03/01/2019  3  
XX343_1  04/01/2019  3
SD229_1  11/01/2018  4 
SD229_1  12/01/2018  4
SD229_1  01/01/2019  4
SD229_1  02/01/2019  4
WE321_1  10/01/2018  1

В принципе, я хотел бы получить следующий вывод:

UniqueID Date        Freq Dummy
XX343_1  02/01/2019  3    0
XX343_1  03/01/2019  3    0
XX343_1  04/01/2019  3    0
SD229_1  11/01/2018  4    0
SD229_1  12/01/2018  4    0
SD229_1  01/01/2019  4    0
SD229_1  02/01/2019  4    1
WE321_1  10/01/2018  1    1

Я попытался использовать следующий код:

 data$Dummy=ifelse(data$Date=="2018-10-01" & data$Freq==1,1,ifelse(
                   data$Date=="2018-10-01" & data$Freq>=2,0,ifelse(
                   data$Date=="2018-11-01" & data$Freq<=2,1,ifelse(
                   data$Date=="2018-11-01" & data$Freq >2,0,ifelse(
                   data$Date=="2018-12-01" & data$Freq<=3,1,ifelse(
                   data$Date=="2018-12-01" & data$Freq >3,0,ifelse(
                   data$Date=="2019-01-01" & data$Freq<=4,1,ifelse(
                   data$Date=="2019-01-01" & data$Freq >4,0,ifelse(
                   data$Date=="2019-02-01" & data$Freq<=5,1,ifelse(
                   data$Date=="2019-02-01" & data$Freq >5,0,ifelse(
                   data$Date=="2019-03-01" & data$Freq<=6,1,ifelse(
                   data$Date=="2019-03-01" & data$Freq >6,0,0
               ))))))))))))

Я продолжаю получать ошибки, и я не уверен, как исправить свои проблемы. Я получаю много ситуаций, когда, если первое появление UniqueID не в октябре, то Dummy будет = 0 в период со второго по последний месяц. Может ли кто-нибудь указать мне правильное направление?

1 Ответ

1 голос
/ 17 апреля 2019
library(dplyr); library(lubridate)
data <- read.table(header = T, stringsAsFactors = F,
  text = "UniqueID Date        Freq
  XX343_1  02/01/2019  3
  XX343_1  03/01/2019  3  
  XX343_1  04/01/2019  3
  SD229_1  11/01/2018  4 
  SD229_1  12/01/2018  4
  SD229_1  01/01/2019  4
  SD229_1  02/01/2019  4
  WE321_1  10/01/2018  1"
) %>% 
  mutate(Date = mdy(Date))

ID_dummy <- data %>%
  group_by(UniqueID) %>%
  summarize(last_Date = max(Date))

data %>%
  left_join(ID_dummy) %>%
  mutate(Dummy = if_else(last_Date == Date & month(last_Date) != 4, 1, 0))
#Joining, by = "UniqueID"
#  UniqueID       Date Freq  last_Date Dummy
#1  XX343_1 2019-02-01    3 2019-04-01     0
#2  XX343_1 2019-03-01    3 2019-04-01     0
#3  XX343_1 2019-04-01    3 2019-04-01     0
#4  SD229_1 2018-11-01    4 2019-02-01     0
#5  SD229_1 2018-12-01    4 2019-02-01     0
#6  SD229_1 2019-01-01    4 2019-02-01     0
#7  SD229_1 2019-02-01    4 2019-02-01     1
#8  WE321_1 2018-10-01    1 2018-10-01     1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...