R常量增量向量子集

时间:2016-03-28 03:34:02

标签: r

我有一个数组(选项罢工):

 550  600  620  640  650  660  680  700  710  720  730  740  750  760  770  780  790  800  810  820  830  840  850  860  870 880  890  900  910  920  930  940  950  960  970  980  990 1000 1010 1020 1030 1040 1050 1060 1070 1080 1090 1100 1110 1120 1130 1140 1150 1160 1170 1180 1190 1200 1210 1220 1230 1240 1250 1260 1270 1280 1290 1300 1310 1320 1330 1340 1350 1360 1370 1380 1390 1400 1410 1420 1430 1440 1450 1460 1470 1480 1490 1500 1520

有时在开头或结尾有不均匀的增量。例如,第一个数字是550,它从那里到600,增加了50个点。

我知道在中央数字(货币附近)处存在上述向量的子集,其增加10个点。我想以某种方式提取它。该向量的中心数为1090。对于不同的矢量,它可以连续变化,如上图所示 - 但应该围绕中心。

所以对于上面的数组,我想提取:

 700  710  720  730  740  750  760  770  780  790  800  810  820  830  840  850  860  870 880  890  900  910  920  930  940  950  960  970  980  990 1000 1010 1020 1030 1040 1050 1060 1070 1080 1090 1100 1110 1120 1130 1140 1150 1160 1170 1180 1190 1200 1210 1220 1230 1240 1250 1260 1270 1280 1290 1300 1310 1320 1330 1340 1350 1360 1370 1380 1390 1400 1410 1420 1430 1440 1450 1460 1470 1480 1490 1500

在此向量中,所有数字均以10点的恒定速率递增。所以基本上我希望能够将第一个向量子集化为一个在10个点不断递增的子集。我怎么能这样做?

一种方法是太循环。取10个点差异和子集之间的差异。但这种方式不是很优雅,因为我必须设置一个数字来停止循环。喜欢听有没有更好的方法。

由于

编辑:

对于以下序列,julius的回答似乎没有效果..

700  710  720  730  740  750  760  770  780  790  800  810  820  830  840  850  860  870  880  890  900  910  920  930  940  950  960  970  980  990 1000
1010 1020 1030 1040 1050 1060 1070 1080 1090 1100 1110 1120 1130 1140 1150 1160 1170 1180 1190 1200 1210 1220 1230 1240 1250 1260 1270 1280 1290 1300 1310
1320 1330 1340 1350 1360 1370 1380 1390 1400 1450 1500

当我使用朱利叶斯的回答时,我得到了: 1410 1420 1430 1440 1450 1460 1470 1480 1490 1500 1510 1520 1530 1540 1550 1560 1570 1580 1590 1600 1610 1620 1630 1640 1650 1660 1670 1680 1690 1700 1710 1720 1730 1740 1750 1760 1770 1780 1790 1800 1810 1820 1830 1840 1850 1860 1870 1880 1890 1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000 2020 2020 2030 2040 2050 2060 2070 2080 2090 2100 2110

2 个答案:

答案 0 :(得分:1)

使用此代码块:

#Subtracting each value by the successor in the vector
b <- a[2:length(a)]-a[1:(length(a)-1)]
#Which difference value has the longest run length
maxpos <- which(rle(b)$length==max(rle(b)$length))
# Extracting the starting and ending indices
start <- sum(rle(b)$length[1:maxpos-1]) + 1
end <- start + rle(b)$length[maxpos]

#Extracted values
a[start:end]

输出:

[1]  700  710  720  730  740  750  760  770  780 ...

答案 1 :(得分:1)

以下几行给出了最长的子序列,其中包含一个常量增量10:

v <- rle(x - 1:length(x) * 10)
v$v[which.max(v$l)] + (sum(v$l[seq_len(which.max(v$l) - 1)]) + 1:max(v$l)) * 10
# [1]  700  710  720  730 ... 1500