рассчитать прошедшее время на основе условия с помощью функции if ()

Я пытаюсь рассчитать прошедшее время на основе определенного условия. В наборе данных 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(.). Не работает.

Спасибо заранее за любые данные.


person Chenxiao    schedule 08.01.2019    source источник


Ответы (1)


Думаю, вам понадобится:

df <- df %>% 
    group_by(ID) %>% 
    mutate(aDUR = c(0, diff(TSFD)))
person YOLO    schedule 08.01.2019