我有一个如下所示的数据集:
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
...
完整数据可用 here 。
用零截距线绘制 x 和 y 更容易直观地看到:
ggplot(dat,aes(x,y)) + geom_line() + geom_hline(yintercept=0)
您可以看到绘图here(如果您不想下载数据并自己绘制它。)
我想挑选出“补丁”,定义为从 y 上的线高于零到低于零时沿 x 的距离。这种情况总是至少发生一次(因为该线从零以上开始),但也可能发生多次。
挑选第一个补丁很容易。
patch1=dat[min(which(dat$y<=0.000001)),]
但是我如何循环并获取后续补丁?
最佳答案
这是一个完整的工作解决方案:
# sample data
df <- data.frame(x=1:10, y=rnorm(10))
# find positive changes in "y"
idx <- which(c(FALSE, diff(df$y > 0) == 1))
# get the change in "x"
patches <- diff(c(0, df[idx, "x"]))
关于r - 如何编写一个通用函数来找出正值之间的距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3703434/