Сравните значения 2 неравных векторов и выберите большее значение - PullRequest
0 голосов
/ 04 июня 2018

У меня есть 2 вектора ценностей, которые я извлек из файла .pdf, который представляет расположение двух разных ключевых слов.vector.1 - первое ключевое слово, а vector.2 - второе ключевое слово.Поэтому мне нужно извлечь все строки между ними, используя что-то вроде ниже.

df.1 <- df [vector.1 [1]: vector.2 [1],] </p>

Iудалось использовать цикл, чтобы пройти все векторы для других документов, но для этого конкретного файла, он имеет неравномерное расположение из-за его структуры.

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)

Как вы можете видеть, вектор.1 [2] больше, чем вектор.2 [2], и фактическое местоположение должно быть вектором.2 [3].Можно ли в любом случае написать код, соответствующий каждому вектору [i], чтобы желаемый результат был примерно таким:

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

Спасибо!

Ответы [ 3 ]

0 голосов
/ 05 июня 2018
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]

0 голосов
/ 05 июня 2018

Или вы хотите наименьшее значение 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
0 голосов
/ 05 июня 2018

Если вы пытаетесь извлечь определенные значения из вектора.2 в другой вектор.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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...