Конечно, многое зависит от того, как отформатированы ваши данные.если у вас есть что-то вроде
df <- data.frame(Period=c(1,1,1,1,2,2,2), Time=c("10:00",NA,NA,"8:00","10:00",NA,"2:00"))
> df
Period Time
1 1 10:00
2 1 <NA>
3 1 <NA>
4 1 8:00
5 2 10:00
6 2 <NA>
7 2 2:00
Если переменная Time
отформатирована как символ, вы можете удалить столбец минут следующим образом:
df$Min <- as.numeric(sapply(strsplit(as.character(df$Time), ":"), "[[", 1))
> df
Period Time Min
1 1 10:00 10
2 1 <NA> NA
3 1 <NA> NA
4 1 8:00 8
5 2 10:00 10
6 2 <NA> NA
7 2 2:00 2
Это намного проще, если выстолбец Min
может быть уже числовым!
Тогда простой способ вернуть общее время, накопленное за каждый период, - это diff
из range
для каждого периода в пределах tapply()
звонок.
tapply(df$Min, df$Period, function(x) diff(range(x, na.rm=T)))
1 2
2 8