Użycie R, próbuję obliczyć całkowity czas trwania dla każdej osoby, gdy ten czas trwania jest czasem spędzonym powyżej pewnego progu.Jak obliczyć całkowity czas trwania koncentracji przekraczającej próg wielokrotnie?
Na przykład na poniższym wykresie mam dane dotyczące stężenia dla 3 osób (ID) i chciałbym znaleźć czas (oś x) spędzony nad niebieską linią przerywaną dla każdej osoby. zestaw danych struktura byłoby coś jak:
head(dataset)
ID time CP
1 1 0.0 0.00000000
2 1 0.0 0.00000000
3 1 0.5 0.03759806
4 1 1.0 0.12523455
5 1 1.5 0.23483219
6 1 2.0 0.34820905
Solid lines represent the concentrations for 3 different subjects
Próbuję użyć następującego kodu:
library(data.table)
TAbove<-setDT(dataset)[CP > .05, diff(range(time)), by = ID]
Jednak ten kod, który oblicza czas trwania od pierwszego wzroście powyżej przerywana niebieska linia do ostatniej kropli. Na przykład dla zielonego ID linii, patrz czarna linia.
Jak mogę napisać kod, który bierze pod uwagę czasy, w których stężenie spada poniżej linii przerywanej, wyłączając je. końcowy wynik byłby całkowitym czasem trwania wszystkich czasów powyżej przerywanej niebieskiej linii. jak poniżej
Zobacz "? Rle". Ignorowanie wielu identyfikatorów w danym momencie, mając, powiedzmy, 'x = sin (seq (-3 * pi, 3 * pi, 0.1)) i obliczanie' r = rle (x> próg) ', pozycje początkowa i końcowa następujących po sobie 'TRUE's (tj.' x> threshold') to 's = cumsum (c (1, r $ lengths)) [r $ wartości]' i 'e = i + r $ lengths [r $ values] - 1', odpowiednio. Podsumowując 'czas [e] - czas [s]' powinien dać całkowity czas gdzie próg 'x>. –