r - 如何获取值差异超过阈值的索引/位置?
问题描述
我有这个数据框:
> new
group date median
1 1 2012-07-01 1.839646
2 1 2012-08-01 1.839646
3 2 2012-09-01 1.839646
4 2 2012-10-01 1.839646
5 3 2012-11-01 1.839646
6 3 2012-12-01 1.839646
7 4 2013-01-01 5.554302
8 4 2013-02-01 5.554302
9 5 2013-03-01 5.554302
10 5 2013-04-01 5.554302
11 6 2013-05-01 5.554302
12 6 2013-06-01 5.554302
13 7 2013-07-01 2.226150
14 7 2013-08-01 2.226150
15 8 2013-09-01 2.226150
16 8 2013-10-01 2.226150
17 9 2013-11-01 2.226150
18 9 2013-12-01 2.226150
我现在想要做的是,我想比较中间值,如果例如第一个和第二个唯一值的差异超过某个限制,那么给我发生这种情况的位置。
一步一步:
在这个例子中,我有三个唯一的中值(1.839646,5.554302,2.226150)
1) 比较第一个和第二个唯一值。如果差值大于(例如)第一个值的 50%,那么给我最后一个值的位置:
所以:
a) abs(1.839646 - 5.554302) = 3,714656
b) 1.839646 的 50% 是 0.919823
c) 3,714656 大于 0.919823
d)获取发生这种情况的索引:索引 6(日期为 2012-12-01)
第二个和第三个(唯一)值相同。
解决方案
调用您的中位数向量x
:
# sample data
x = rep(c(1.839646,5.554302,2.226150), each = 6)
which(c(0, abs(diff(x))) > 0.5 * x) - 1
# [1] 6 12
演示您的数据:
new = read.table(text = " group date median
1 1 2012-07-01 1.839646
2 1 2012-08-01 1.839646
3 2 2012-09-01 1.839646
4 2 2012-10-01 1.839646
5 3 2012-11-01 1.839646
6 3 2012-12-01 1.839646
7 4 2013-01-01 5.554302
8 4 2013-02-01 5.554302
9 5 2013-03-01 5.554302
10 5 2013-04-01 5.554302
11 6 2013-05-01 5.554302
12 6 2013-06-01 5.554302
13 7 2013-07-01 2.226150
14 7 2013-08-01 2.226150
15 8 2013-09-01 2.226150
16 8 2013-10-01 2.226150
17 9 2013-11-01 2.226150
18 9 2013-12-01 2.226150", header = TRUE)
results = which(c(0, abs(diff(new$median))) > 0.5 * new$median) - 1
results
# [1] 6 12
new$date[results]
# [1] 2012-12-01 2013-06-01
推荐阅读
- python - 在 Windows 上的虚拟环境中安装包
- kde - 将 Meta 键设置为 KDE 快捷方式
- youtube-api - Youtube API:默认评论设置不适用于通过 API 发布的视频
- python - 如何在 Tensorflow 2 中使用腌制的预训练权重?
- python - ImportError:没有名为 scipy.constants 的模块
- javascript - nodejs - 将帐户信息保存在 .env 文件或客户端数据库中
- excel - 将负账户余额分配给正账户余额,以尽量减少剩余金额
- bash - BASH将变量中的值(文件大小)与数字进行比较
- r - 我想在 r 中有两个组的列表上运行 emmeans_test
- javascript - 如何使用brain.js在训练有素的大脑中设置默认值以防万一