r - 如何编写一个通用函数来找出正值之间的距离?

标签 r

我有一个如下所示的数据集:

            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/

相关文章:

在 R shiny 中双击将 plotoutput 替换为 leafletoutput

r - 在 Ubuntu 20.4 上安装 Rstudio 错误(代码=已退出,状态=127)

r - 如何为动物园对象(格子)的 xyplot 设置 ylim

r - 如何使geom_area()为缺失值留出空隙?

r - 使用 ggplot 在 R 中创建堆叠百分比条形图

r - 由于 NA 的原因,无法对数据帧进行子集化(过滤)

r - 为使用 map() 创建的 ggplots 添加标题

r - 采样后分割数据

r - 我的分组横杆不躲避,而我的箱形图却躲避

android - 在 Android 上安装 R