Манипуляции со свиданием в R - PullRequest
0 голосов
/ 07 мая 2020

У меня есть фрейм данных, как показано ниже, мне нужно найти количество дней в пределах области (которая простирается между начальным dt и конечным dt). Logi c соответствует формуле apply_days ниже.

cust start-dt    end-dt      item item_type  year applicable_days
A    07-01-2019  07-01-2020  AA   xxxxxxxxx  2019 MIN("2019-12-31", end-dt) - MAX(start-dt,"2019-01-01") 
A    07-01-2019  07-01-2020  AA   xxxxxxxxx  2020 MIN("2020-12-31", end-dt) - MAX(start-dt,"2020-01-01") 

Я пробовал несколько способов сделать это. Это не работает. Можете ли вы мне помочь, где я делаю ошибку?

Испытание 1:

df <- df %>%
  mutate(
    applicable-days =  (min( as.Date(paste0(year,"-12-31")), end-dt) - max(start-dt, as.Date(paste0(year,"-01-01"))) )
  )

Результат -> дает то же значение, что и первая запись.

Испытание 2:

df[,"applicable-days"] <- as.numeric(min( as.Date(paste0(df[,"year"],"-12-31")) , df[,"end-dt"] ) - 
                                     max( df[,"start-dt"] , as.Date(paste0(df[,"year"],"-01-01"))) )

Результат -> возвращает только NA

Испытание 3:

df[,"applicable-days"] <- apply(df, 1, function(x){
                               as.numeric(min( as.Date(paste0(x["year"],"-12-31")) , x["end-dt"] ) - 
                                          max( x["start-dt"] , as.Date(paste0(x["year"],"-01-01"))) )
                                })

Результат -> возвращает только NA

Когда я пробую использовать только одно значение, он отлично работает в последних двух испытаниях.

Пожалуйста, помогите мне найти здесь ошибку.

Заранее спасибо

...