आर का उपयोग करके, मैं प्रत्येक व्यक्ति के लिए कुल समयावधि की गणना करने की कोशिश कर रहा हूं, जहां इस समय की अवधि कुछ सीमा से ऊपर बिताए गए समय है।एकाग्रता की कुल समयावधि की गणना कैसे करें, एक सीमा को कई बार पार करते हुए?
उदाहरण के लिए, नीचे की साजिश में मेरे पास 3 विषयों (आईडी) के लिए एकाग्रता डेटा है, और मैं प्रत्येक व्यक्ति के लिए नीली धराशायी रेखा से ऊपर का समय (एक्स अक्ष) खोजना चाहता हूं। डेटा सेट संरचना होगा कुछ की तरह:
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
मैं निम्नलिखित कोड का उपयोग करने की कोशिश की:
library(data.table)
TAbove<-setDT(dataset)[CP > .05, diff(range(time)), by = ID]
हालांकि, इस कोड है कि यह ऊपर पहले वृद्धि से समय अवधि की गणना करता है आखिरी बूंद पर धराशायी नीली रेखा। उदाहरण के लिए हरी रेखा आईडी के लिए, ब्लैक लाइन देखें।
मैं एक कोड है कि खाते में उन्हें बहिष्कृत करके बार जहां सांद्रता धराशायी रेखा से नीचे ड्रॉप लेता है, कैसे लिख सकते हैं। अंतिम परिणाम धराशायी नीली रेखा के ऊपर हर समय की कुल समय अवधि होगी। जैसे
नीचे
'rle' देखें। पल के लिए एकाधिक आईडी को अनदेखा करते हुए, कहें, 'x = sin (seq (-3 * pi, 3 * pi, 0.1))' और कंप्यूटिंग 'r = rle (x> threshold)', प्रारंभिक और अंत स्थिति क्रमशः 'सत्य' (यानी 'x> थ्रेसहोल्ड') हैं 's = cumsum (सी (1, आर $ लंबाई)) [आर $ मान]' और 'ई = i + आर $ लंबाई [आर $ मूल्य] - क्रमशः 1'। सारांश 'समय [ई] - समय [ओं] 'को कुल समय देना चाहिए जहां' x> थ्रेसहोल्ड'। –