2015-11-07 11 views
5

Mam wektor powiedzmyJak wyodrębnić wielokrotności liczby z wektorem w R

x <- 1:1000

i chcę, aby wyodrębnić wielokrotności 8 z niego.

Co należy zrobić? (nie chcę robić x[-c(8,16,24,.....)])

Celem jest usunięcie wielokrotności 8 z x wektora

+1

operator modulo to normalny sposób 'res <- x [! X %% 8]' – jenesaisquoi

+0

Masz na myśli indeksy, które są wielokrotnością 8 lub tylko wartościami, które są wielokrotnością liczby 8? – NicE

+0

Dzięki za odpowiedzi! Mam na myśli wartości, które są wielokrotnością 8. – Caterpillar

Odpowiedz

9

Do tego można użyć operatora modulo, czyli %%. Weźmy na przykład:

> 322%%8 
[1] 2 

który mówi, że po podzieleniu przez 322 8 2 szczątków, czyli 320 jest dokładnie 40 razy 8, pozostawiając 2.

W ty przykład możemy użyć %% połączeniu z podzbioru do uzyskać wielokrotności 8. Pamiętaj, że %% plony 0 dla dokładnej wielokrotności 8:

input = 1:1000 
multiple_of_8 = (input %% 8) == 0 
head(multiple_of_8) 
[1] FALSE FALSE FALSE FALSE FALSE FALSE 
length(multiple_of_8) 
[1] 1000 

również pamiętać, że %% jest wektorowy operacja, czyli z lewej strony jest wektorem, wynik będzie również wektor. multiple_of_8 wektor zawiera obecnie 1000 logicals stwierdzające, czy ten konkretny element input jest dokładną wielokrotnością 8. Za pomocą tego logiczną wektor do podzbioru dostać ty wynik czego potrzebujesz:

input[multiple_of_8] 
    [1] 8 16 24 32 40 48 56 64 72 80 88 96 104 112 120 
[16] 128 136 144 152 160 168 176 184 192 200 208 216 224 232 240 
[31] 248 256 264 272 280 288 296 304 312 320 328 336 344 352 360 
[46] 368 376 384 392 400 408 416 424 432 440 448 456 464 472 480 
[61] 488 496 504 512 520 528 536 544 552 560 568 576 584 592 600 
[76] 608 616 624 632 640 648 656 664 672 680 688 696 704 712 720 
[91] 728 736 744 752 760 768 776 784 792 800 808 816 824 832 840 
[106] 848 856 864 872 880 888 896 904 912 920 928 936 944 952 960 
[121] 968 976 984 992 1000 

lub bardziej zwięźle:

input[(input %% 8) == 0] 
+0

'8 * 1: (1000% /% 8)' – germcd

+0

@germcd mógłbyś podać nieco więcej kontekstu temu, co robisz. Można to zrobić w nowej odpowiedzi. –

+0

Użyłem podziału liczb całkowitych. jest taki sam jak "8 * 1: 125" – germcd

Powiązane problemy