比较2个不均匀向量的值并选择更大的值

时间:2018-06-04 20:57:03

标签: r

我有2个值的向量,我从.pdf文件中提取,表示两个不同关键字的位置。 vector.1是第一个关键字,而vector.2是第二个关键字。所以我需要使用下面的内容提取其间的所有行。

df.1< - df [vector.1 [1]:vector.2 [1],]

我设法使用循环遍历其他文档的所有向量,但对于此特定文件,由于其结构,它具有不均匀的位置。

vector.1 <- c(12, 85, 144, 188, 233, 285, 338, 384, 426, 469, 512, 558, 613, 669, 713, 758, 808, 859, 908, 964, 1046, 1090, 1126, 1149, 1216, 1267, 1346, 1423, 1464, 1513, 1560, 1607, 1665, 1718, 1763, 1810, 1856, 1908, 1938)

vector.2 <- c(48, 53, 111, 116, 155, 160, 198, 203, 250, 255, 303, 308, 350, 355, 392, 397, 435, 440, 478, 483, 523, 528, 578, 583, 635, 640, 679, 684, 723, 728, 773, 778, 824, 829, 871, 876, 929, 934, 1008, 1017, 1091, 1096, 1182, 1187, 1232, 1237, 1308, 1313, 1385, 1390, 1430, 1435, 1478, 1483, 1525, 1530, 1572, 1577, 1629, 1634, 1683, 1688, 1729, 1734, 1776, 1781, 1821, 1826, 1874, 1879, 1967, 1972)

如你所见,vector.1 [2]大于vector.2 [2],实际位置应该是vector.2 [3]。无论如何编写代码来匹配每个向量[i],以便所需的结果如下所示:

vector.3 <- c(48, 111, 155, 198, 250, 303, 392, 435, ....)

谢谢!

3 个答案:

答案 0 :(得分:0)

如果你试图将vector.2中的特定值提取到另一个vector.3中,这应该做,只要索引遵循以2分隔的序列。你可以通过提供开始和结束索引使用seq生成一系列索引和相应的增量。

vector.3 <-  vector.2[seq(1,length(vector.2),by=2)]
 [1]   48  111  155  198  250  303  350  392  435  478
[11]  523  578  635  679  723  773  824  871  929 1008
[21] 1091 1182 1232 1308 1385 1430 1478 1525 1572 1629
[31] 1683 1729 1776 1821 1874 1967

答案 1 :(得分:0)

vector.2[rowSums(outer(vector.1,vector.2,">"))+1]
 [1]   48  111  155  198  250  303  350  392  435  478  523  578  635  679  723  773  824  871  929
[20] 1008 1091 1091 1182 1182 1232 1308 1385 1430 1478 1525 1572 1629 1683 1729 1776 1821 1874 1967
[39] 1967

您也可以vector.2[colSums(sapply(vector.1,">",vector.2))+1]

答案 2 :(得分:0)

或者您希望vector.2的最小值大于vector.1的每个值吗?...

sapply(vector.1, function(x) min(vector.2[vector.2>x]))

 [1]   48  111  155  198  250  303  350  392  435  478  523  578  635  679  723  773  824  871  929 1008 1091 1091 1182
[24] 1182 1232 1308 1385 1430 1478 1525 1572 1629 1683 1729 1776 1821 1874 1967 1967