Добрый день,
Это продолжение вопроса к этой записи
Вот некоторые фиктивные данные:
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
В принципе, я хотел бы, чтобы R рассказал мне, сколько времени проводится на каждом сайте. Приведенные выше данные имеют повторяющиеся экземпляры на сайтах, и я хотел бы, чтобы R выявлял повторения и добавлял разницу во времени для каждого.
Я попробовал следующий код:
data.summary<-data %>%
group_by(Individual, Sites) %>%
summarise(time_spent = max(Date)-min(Date))
Но для этого потребуется разница во времени с минимальной датой на этом сайте и максимальной датой на сайте, не считая случаев повторения или времени, когда человек находился на других сайтах.
Далее, углубляясь в фиктивные данные, в сводном коде говорится, что индивидуум А провел на площадке 4 2 дня. Однако этот индивидуум покинул сайт 4 и позднее вернулся на сайт и должен иметь общее время на площадке 4 28 минут. , Как я могу получить R для отражения повторяющихся записей для этого сайта?
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
Спасибо!
РЕДАКТИРОВАТЬ: Я обнаружил проблему с dplyr подводить итоги, где добавляется дополнительное время. Вот фиктивные данные:
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)
Я хочу суммировать время, проведенное на сайте 40, с минимальной отметкой времени на этом сайте, вычтенной из максимальной отметки времени на сайте
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
Это говорит о том, что общее время, проведенное на этом сайте, составляет 1,47 часа. Однако, когда я вручную получаю разницу во времени, я получаю совершенно другое значение.
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
Фактическое время на сайте 40 составляет 0,70 часа. Я не совсем уверен, что подытоживает ссылка или почему добавляется дополнительное время.
РЕДАКТИРОВАТЬ 2: Хорошо, это похоже на проблему единиц! Вот более воспроизводимые данные:
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
Здесь говорится, что время, проведенное на площадке 40, составляет 1,47 дня, но это должны быть часы! По данным ручного поиска разницы во времени ниже:
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
Как я могу исправить эту проблему единиц? Вместо того, чтобы отображать часы, смешанные с днями, я бы хотел, чтобы R рассчитал время для всех сайтов в днях.