Bonne journée,
Il s'agit d'une question complémentaire à ce poste
Voici quelques données fictives :
Date <- as.POSIXct(c('2018-03-20 11:52:25', '2018-03-22 12:01:44', '2018-03-20 12:05:25', '2018-03-20 12:10:40', '2018-03-20 12:12:51 ', '2018-03-21 2:01:23', '2018-03-21 2:45:01', '2018-03-21 3:30:00', '2018-03-21 3:45:00', '2018-03-21 5:00:00', '2018-03-21 5:45:00'))
Sites<-c(4, 4, 4, 6, 6, 7, 7, 4, 4, 6, 6)
Individual<-c("A", "A", "A", "A", "A", "A", "A", "A", "A", "A","A")
data<-data.frame(Individual, Date, Sites)
Individual Date Sites
A 2018-03-20 11:52:25 4
A 2018-03-22 12:01:44 4
A 2018-03-20 12:05:25 4
A 2018-03-20 12:10:40 6
A 2018-03-20 12:12:51 6
A 2018-03-21 02:01:23 7
A 2018-03-21 02:45:01 7
A 2018-03-21 03:30:00 4
A 2018-03-21 03:45:00 4
A 2018-03-21 05:00:00 6
A 2018-03-21 05:45:00 6
En gros, je voudrais que R me dise combien de temps est passé sur chaque site. Les données ci-dessus ont des instances répétées sur les sites et j'aimerais que R fasse ressortir les répétitions et ajoute les différences de temps pour chacune.
J'ai essayé le code suivant :
data.summary<-data %>%
group_by(Individual, Sites) %>%
summarise(time_spent = max(Date)-min(Date))
Mais cela prendra une différence de temps entre la date minimale sur ce site et la date maximale sur le site, sans tenir compte des cas de répétition, ou des moments où l'individu est sur d'autres sites.
En creusant davantage dans les données fictives, le code de compression indique que l'individu A a passé 2 jours sur le site 4. Cependant, cet individu a quitté le site 4 et y est retourné à une date ultérieure. Le temps total passé sur le site 4 devrait être de 28 minutes. Comment puis-je faire en sorte que R reflète les entrées répétitives pour ce site ?
Date1<-as.POSIXct("2018-03-20 11:52:25") # First instance at site 4
Date2<-as.POSIXct("2018-03-20 12:05:25") # Last time A spent at site 4 before leaving
difftime(Date2, Date1, units="mins")
# time diff = 13 minutes
# Second instance at site 4
Date3<-as.POSIXct("2018-03-21 03:30:00") # Second instance at site 4
Date4<-as.POSIXct("2018-03-21 03:45:00") # Last time A spent at site 4
difftime(Date4, Date3, units="mins")
# time diff= 15 mins
Merci !
EDIT : Je trouve un problème avec dplyr summarise, où le temps supplémentaire est ajouté. Voici des données fictives :
Dates<-as.POSIXct(c("2018-04-09 16:59:03",
"2018-04-09 18:27:23",
"2018-04-09 17:01:20",
"2018-04-09 17:41:17"))
Individual<-c("A","A","A","A")
Site<-c("40","40","40", "40")
data<-data.frame(Dates, Individual, Site)
Je veux résumer le temps passé sur le site 40, avec l'horodatage minimum sur ce site soustrait de l'horodatage maximum sur le site.
data %>%
group_by(Individual) %>%
arrange(Dates) %>%
group_by(Individual, Site) %>%
summarise(time_spent = max(Dates) - min(Dates))
# A tibble: 1 x 3
# Groups: Individual [?]
Individual Site time_spent
<fct> <fct> <time>
1 A 40 1.472222 hours
Cela indique que le temps total passé sur ce site est de 1,47 heures. Cependant, lorsque j'obtiens manuellement un décalage horaire, j'obtiens une valeur totalement différente.
maxtime<-("2018-04-09 17:41:17")
mintime<-("2018-04-09 16:59:03")
difftime(maxtime, mintime, units="hours")
# Time difference of 0.7038889 hours
Le temps réel sur le site 40 est de 0,70 heures. Je ne suis pas sûr de ce à quoi summarise fait référence, ou pourquoi le temps supplémentaire est ajouté.
EDIT 2 : Ok, cela ressemble à un problème d'unités ! Voici d'autres données reproductibles :
Dates<-as.POSIXct(c("2018-04-09 16:43:44","2018-03-20 11:52:25", "2018-04-09 16:59:03",
"2018-04-09 18:27:23",
"2018-04-09 17:01:20",
"2018-04-09 17:41:17"))
Individual<-c("A","A","A","A", "A","A")
Site<-c("38","38", "40","40","40", "40")
data<-data.frame(Dates, Individual, Site)
Dates Individual Site
1 2018-04-09 16:43:44 A 38
2 2018-03-20 11:52:25 A 38
3 2018-04-09 16:59:03 A 40
4 2018-04-09 18:27:23 A 40
5 2018-04-09 17:01:20 A 40
6 2018-04-09 17:41:17 A 40
data %>%
group_by(Individual) %>%
arrange(Dates) %>%
group_by(Individual, Site) %>%
summarise(time_spent = max(Dates) - min(Dates))
# A tibble: 2 x 3
# Groups: Individual [?]
Individual Site time_spent
<fct> <fct> <time>
1 A 38 20.202303 days
2 A 40 1.472222 days
Ici, il est dit que le temps passé sur le site 40 est de 1,47 jours, mais cela devrait être des heures ! Selon la recherche manuelle des différences de temps ci-dessous :
maxtime<-("2018-04-09 18:27:23")
mintime<-("2018-04-09 16:59:03")
difftime(maxtime, mintime, units="hours")
# Time difference of 1.472222 hours
Comment puis-je corriger ce problème d'unités ? Au lieu d'afficher les heures mélangées aux jours, je voudrais que R calcule le temps de tous les sites en jours.