Mam 2 wektory wartości, które wyodrębniłem z pliku .pdf, który reprezentuje lokalizację dwóch różnych słów kluczowych. Vector.1 to pierwsze słowo kluczowe, gdy wektorze.2 to drugie słowo kluczowe. Muszę więc wyodrębnić wszystkie rzędy między używaniem czegoś takiego jak poniżej.

DF.1 <- DF [Vector.1 [1]: Wektor.2 [1],]

Udało mi się użyć pętli, aby przejść przez wszystkie wektory dla innych dokumentów, ale dla tego konkretnego pliku ma nierówną lokalizację ze względu na jego strukturę.

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)

Jak widać wektor.1 [2] jest większy niż wektor.2 [2], a rzeczywista lokalizacja ma być wektorem.2 [3]. Jest tam, aby napisać kod, który pasuje do każdego wektora [I] tak, że pożądany wynik jest czymś w rodzaju poniżej:

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

Dziękuję Ci!

r
0
Tze 4 czerwiec 2018, 23:57

3 odpowiedzi

Najlepsza odpowiedź
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

Możesz także zrobić vector.2[colSums(sapply(vector.1,">",vector.2))+1]

0
Onyambu 4 czerwiec 2018, 22:32

Jeśli próbujesz wyodrębnić określone wartości z wektora.2 do innego wektora.3 To powinno to zrobić, pod warunkiem, że indeksy postępują zgodnie z sekwencją oddzieloną 2. Możesz wygenerować sekwencję indeksów przy użyciu SEQ, zapewniając indeks początkowy i końcowy i przyrost odpowiednio przez argumenty.

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
0
CodeBusker_JEP 4 czerwiec 2018, 21:07

Lub chcesz najmniejszej wartości vector.2, który jest większy niż każda wartość 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
Andrew Gustar 4 czerwiec 2018, 21:38