Я пытаюсь рассчитать прошедшее время на основе определенного условия. В наборе данных aDUR - текущее прошедшее время, TSFD - время в часах. Мне нужно вычислить aDUR только тогда, когда FLAG1 = 1, который должен быть TSFD записи [i + 1] за вычетом TSFD записи [i]. Когда FLAG1 = 0, всем записям aDUR присваивается 1.
Вот образец моего набора данных.
head(df1_2)
C ID DV DATE TIME TSFD TSLD DOSE MDV EVID RATE DUR WT AGE HEIGHT BMI SEX AMT FLAG1
<lgl> <int> <fct> <fct> <fct> <dbl> <dbl> <int> <int> <int> <dbl> <fct> <dbl> <dbl> <fct> <fct> <fct> <fct> <dbl>
1 NA 11003 . 3/14/2007 22:00 0 0 75 1 1 246. . 54.7 44.6 73 15.89851181 Female 245.97 0
2 NA 11003 . 3/14/2007 23:00 1 0 75 1 1 246. . 54.7 44.6 73 15.89851181 Female 245.97 1
3 NA 11003 . 3/15/2007 1:00 3 0 75 1 1 246. . 54.7 44.6 73 15.89851181 Female 245.97 0
4 NA 11003 . 3/15/2007 2:00 4 0 75 1 1 246. . 54.7 44.6 73 15.89851181 Female 245.97 0
5 NA 11003 . 3/15/2007 3:00 5 0 75 1 1 246. . 54.7 44.6 73 15.89851181 Female 245.97 0
6 NA 11003 . 3/15/2007 4:00 6 0 75 1 1 246. . 54.7 44.6 73 15.89851181 Female 245.97 1
Я новичок в R. Вот что я мог придумать, но это не работает. Может кто-нибудь указать, где я ошибся? Я тоже пробовал ifelse, но не знаю, как рассчитать прошедшее время в функции ifelse.
f2 <-function(fc){
TSFD <- fc$TSFD
FLAG1 <- fc$FLAG1
aDUR <- rep(1,length(FLAG1))
for (i in 1:length(FLAG1))
if(FLAG1 == 1) {aDUR[i] <- TSFD[i+1]-TSFD[i]}
fc$aDUR <- aDUR
return(fc)
}
Кроме того, у меня есть несколько предметов в наборе данных. Как я могу применить эту функцию на основе группы идентификаторов? Я пробовал df2 <- df1_2%>%group_by(ID)%>%f2(.)
. Не работает.
Спасибо заранее за любые данные.