2015-11-07 15 views
5

Ich habe einen Vektor sagen wirWie Vielfachen einer Zahl von einem Vektor in R extrahieren

x <- 1:1000

und ich möchte das Vielfachen von 8 daraus extrahieren.

Was soll ich tun? (Ich will nicht x[-c(8,16,24,.....)] tun)

Das Ziel ist es, die ein Vielfaches von 8 aus dem x Vektor zu entfernen

+1

Modulo-Operator ist der normale Weg 'res <- x [! X %% 8]' – jenesaisquoi

+0

Meinst du die Indizes, die ein Vielfaches von 8 sind oder nur die Werte, die ein Vielfaches von 8 sind? – NicE

+0

Danke für die Antworten! Ich meine die Werte, die ein Vielfaches von 8 sind. – Caterpillar

Antwort

9

Dazu geben Sie den Modulo-Operator verwenden können, das heißt %%. Nehmen Sie zum Beispiel:

> 322%%8 
[1] 2 

, die Ihnen sagt, dass 322 nach dem Teil von 8, 2 bleibt, dh 320 ist genau 40 mal 8, 2.

verlassen In Ihrem Beispiel, das wir %% mit subsetting kombiniert verwenden können, um holen Sie sich das Vielfache von 8. Denken Sie daran, dass %% Ausbeuten 0 für die exakte Vielfache von 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 

auch beachten, dass %% ein vektorisiert Betrieb ist, dh von der linken Seite ist ein Vektor, wird das Ergebnis auch sein, Vektor. Der multiple_of_8 Vektor enthält jetzt 1000 Logicals besagt, ob das bestimmte Element von input genau ein Vielfaches von 8 ist, dass die logische Vektor Mit der Teilmenge Sie bekommen ist das Ergebnis, das Sie brauchen:

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 

oder kompakter:

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

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

+0

@germcd könnten Sie etwas mehr Kontext zur Verfügung stellen, was Sie tun. Dies könnte in einer neuen Antwort erfolgen. –

+0

Ich verwendete Ganzzahl-Division. es ist das gleiche wie '8 * 1: 125' – germcd

Verwandte Themen