我有这个数据框:
> 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)
第二个和第三个(唯一)值相同。
答案 0 :(得分:1)
称中位数为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