J'ai un ensemble de données qui ressemble à ceci:Comment écrire une fonction générique pour déterminer la distance entre les valeurs positives?
x y
1 0.0000 0.4459183993
2 125.1128 0.4068805502
3 250.2257 0.3678521348
4 375.3385 0.3294434397
5 500.4513 0.2922601919
6 625.5642 0.2566381551
7 750.6770 0.2229130927
8 875.7898 0.1914207684
9 1000.9026 0.1624969456
10 1126.0155 0.1364773879
11 1251.1283 0.1136978589
12 1376.2411 0.0944717371
13 1501.3540 0.0786550515
14 1626.4668 0.0656763159
15 1751.5796 0.0549476349
16 1876.6925 0.0458811131
17 2001.8053 0.0378895151
18 2126.9181 0.0304416321
19 2252.0309 0.0231041362
20 2377.1438 0.0154535572
21 2502.2566 0.0070928195
22 2627.3694 -0.0020708606
23 2752.4823 -0.0119351534
24 2877.5951 -0.0223944877
25 3002.7079 -0.0332811155
26 3127.8208 -0.0442410358
27 3252.9336 -0.0548855203
...
données complètes disponibles here.
Il est plus facile de voir visuellement en traçant x et y avec une ligne d'interception zéro: (. Si vous ne souhaitez pas télécharger les données et tracer vous-même)
ggplot(dat,aes(x,y)) + geom_line() + geom_hline(yintercept=0)
Vous pouvez voir le tracé here
Je veux choisir les «patches» définis comme la distance le long de x à partir du moment où la ligne passe au-dessus de zéro sur le y jusqu'à ce qu'il passe en dessous de zéro. Cela arrivera toujours au moins une fois (puisque la ligne commence au-dessus de zéro), mais cela peut arriver plusieurs fois.
Il est facile de choisir le premier patch.
patch1=dat[min(which(dat$y<=0.000001)),]
Mais comment est-ce que je passerais à travers et ramasser les correctifs suivants?
S'il vous plaît utiliser 'dput' pour intégrer vos données dans ce post ... un petit sous-ensemble devrait être suffisant. – Shane