Рассчитайте разницу во времени в днях для дат символов, а также с пробелами в одном из столбцов - PullRequest
0 голосов
/ 30 мая 2020

У меня есть следующие данные. Оба столбца представляют собой даты и должны учитывать разницу в днях. Однако большинство значений в одном из столбцов даты пустые, поэтому я должен вернуть для них NA.

ab 02-07-2012
18-08-2012
13-08-2012
16-04-2012
26-04-2012
03-05-2012 12-05-2012

09-06-2012
30-05-2012
22-06-2012
05-07-2012
30-06-2012
09-05-2012
22-06-2012
02-07-2012
17- 07-2012
17-08-2012
16-07-2012
01-08-2012
05-08-2012
17-08-2012
30-04- 2012
05-07-2012
07-04-2012
27-04-2012
21-06-2012
03-07-2012
21-07-2012
24-04-2012
05-06-2012
03-07-2012
02-04-2012 01-06-2012

06-04-2012
15-04-2012
16-06-2012
01-08-2012
13-05-2012
09-07-2012
09-07-2012
18- 04-2012
09-08-2012
10-04-2012
12-05-2012
04-04-2012
04-06-2012 04-06-2012

15-06-2012
02-07-2012
05-07-2012
21-08-2012
19-07-2012
06-08-2012
15-06-2012
06-04-2012
04-06-2012
23-07-2012
06-04-2012
12-04-2012 11- 06-2012

24-05-2012
03-08-2012
04-05-2012 09-05-2012

07-05-2012
07 -06-2012
06-07-2012
13-07-2012
26-07-2012
26-04-2012
22-06-2012
26-07 -2012
12-04-2012
07-08-2012
27-06-2012
03-04-2012 02-06-2012

13-04-2012
28-07-2012
07-05-2012
29-06-2012
03-04-2012 02-06-2012

04-04-2012
04-04-2012 24-05-2012

04-04-2012
05-04-2012
07-04-2012
10-04-2012
11 -04-2012
13-04-2012
13-04-2012
13-04-2012
13-04-2012
14-04-2012
14-04 -2012
14-04-2012
18-04-2012
19-04-2012
21-04-2012
25-04-2012
25-04-2012
26-04-2012
26-04-2012
26-04-2012
27-04-2012
30-04-2012
04-06-2012
04-06-2012
05-06-2012
05-06-2 012
05-06-2012
05-06-2012
05-06-2012 16-07-2012

06-06-2012 29-06-2012

Я пробовал следующее, но не смог

date_strings[date_strings==""]<-NA      # Replaced blank spaces with NA & removed them
head(date_strings)
newdata<-na.omit(date_strings)
str(newdata)

newdata$a<-as.Date(newdata$a,"%m%d%y")
newdata$b<-as.Date(newdata$b,"%m%d%y")


diff_in_days = difftime(newdata$a, newdata$b, units = "days") # days

Ответы [ 2 ]

2 голосов
/ 30 мая 2020

Измените даты на класс даты, который автоматически превратит пробелы в NA, а затем вычтет дни, используя difftime.

date_strings[] <- lapply(date_strings, as.Date, format = '%d-%m-%Y')
date_strings$diff_in_days = difftime(date_strings$b, date_strings$a,
                                      units = "days") 

date_strings
#           a          b diff_in_days
#1 2012-07-02       <NA>           NA
#2 2012-08-18       <NA>           NA
#3 2012-08-13       <NA>           NA
#4 2012-04-16       <NA>           NA
#5 2012-04-26       <NA>           NA
#6 2012-05-03 2012-05-12            9

Или напрямую вычтите

date_strings$diff_in_days = date_strings$b -  date_strings$a

данные

date_strings <- structure(list(a = c("02-07-2012", "18-08-2012", "13-08-2012", 
"16-04-2012", "26-04-2012", "03-05-2012"), b = c("", "", "", 
"", "", "12-05-2012")), class = "data.frame", row.names = c(NA, -6L))
1 голос
/ 30 мая 2020

С помощью tidyverse мы можем сделать

library(dplyr)
library(lubridate)
date_strings %>% 
    mutate(across(everything(), dmy)) %>%
    mutate(diff_in_days = b - a)
#           a          b diff_in_days
#1 2012-07-02       <NA>      NA days
#2 2012-08-18       <NA>      NA days
#3 2012-08-13       <NA>      NA days
#4 2012-04-16       <NA>      NA days
#5 2012-04-26       <NA>      NA days
#6 2012-05-03 2012-05-12       9 days

данные

date_strings <- structure(list(a = c("02-07-2012", "18-08-2012", "13-08-2012", 
"16-04-2012", "26-04-2012", "03-05-2012"), b = c("", "", "", 
"", "", "12-05-2012")), class = "data.frame", row.names = c(NA, -6L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...