считать уникальные случаи, которые попадают в перекрывающиеся положительные интервалы ymd hms по секундам - PullRequest
0 голосов
/ 24 мая 2019

имеют время начала и окончания posixct, и я пытаюсь подсчитать уникальные случаи элементов, у которых есть время перекрытия, на секунду

не могу изменить posxct ymd hms, используя lubridate, или оно меняет hms на нечетноевремя.данные были в мм: сс изначально в виде символа.Я добавил 00: к началу, используя манипуляции со строками, но не могу получить правильный чч: мм: сс для dplyr или цикла, который работает

`head(Fish_20180424_001_New) #my data table

      Survey ID          Clip ID                 Species         Enter Frame          Exit Frame
1: 20180424 001 20180424 001 001 Catostomus occidentalis 2019-05-23 00:01:03 2019-05-23 00:01:08
2: 20180424 001 20180424 001 001   Ptychocheilus grandis 2019-05-23 00:01:16 2019-05-23 00:01:18
3: 20180424 001 20180424 001 001 Catostomus occidentalis 2019-05-23 00:01:48 2019-05-23 00:01:52
4: 20180424 001 20180424 001 001 Catostomus occidentalis 2019-05-23 00:02:04 2019-05-23 00:02:06
5: 20180424 001 20180424 001 001                   Unkn. 2019-05-23 00:02:06 2019-05-23 00:02:08
6: 20180424 001 20180424 001 001   Ptychocheilus grandis 2019-05-23 00:02:07 2019-05-23 00:02:11      

setkey(Fish_20180424_001_New, Species, `Enter Frame`, `Exit Frame`)
vecTime <- seq(from=Fish_20180424_001_New$`Enter Frame`[1],to=Fish_20180424_001_New$`Exit Frame`[nrow(Fish_20180424_001_New)],by=1)
res <- data.frame(time=vecTime)

for(i in 1:length(unique(Fish_20180424_001_New$Species)) ) { 
addz <- array(0,length(vecTime))
remz <- array(0,length(vecTime))

Fish_20180424_001_New_Final <- Fish_20180424_001_New[J(unique(Fish_20180424_001_New$Species)[i]),] # Subset a certain species

startAgg <- aggregate(Fish_20180424_001_New_Final$`Enter Frame`,by=list(Fish_20180424_001_New_Final$`Enter Frame`),length)
endAgg <- aggregate(Fish_20180424_001_New_Final$`Exit Frame`,by=list(Fish_20180424_001_New_Final$`Exit Frame`),length)
addz[which(vecTime %in% startAgg$Group.1 )] <- startAgg$x
remz[which(vecTime %in% endAgg$Group.1)] <- -endAgg$x

res[,c( unique(Fish_20180424_001_New$Species)[i] )] <- cumsum(addz + remz)

}

res2<-res%>%filter(time < "2019-05-23 00:20:01")

max(res2$`Catostomus occidentalis`)
max(res2$`Micropterus sp`)
max(res2$`Micropeterus salmoides`)
max(res2$`Morone saxatilis`)
max(res2$`Ptychocheilus grandis`)
max(res2$Unidentified)
max(res2$Unkn.)

только для vecTimeдлина 66 и, кажется, начинается в правильном месте (00:01:03), но заканчивается рано, когда первое время начала перекрывается временем окончания (02:06)

необходимо получить соответствующую последовательность, которая должнаконец на длине последней записи в конце времени, которая составляет 00: 51: 27

1 Ответ

0 голосов
/ 28 мая 2019

, изменив вторую часть аргумента vecTime (to =) на max (выходной кадр), я смог получить соответствующий ответ и устранить проблемы, когда время начала и окончания перекрываются.

все еще открыты дляизучать другие ответы, если кому-то хочется публиковать дополнительные мысли

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...