如何从R中的向量中提取数字的倍数

Cat*_*lar 4 r vector

我有一个矢量让我们说

x <- 1:1000

我想从中提取8的倍数.

我该怎么办?(我不想这样做x[-c(8,16,24,.....)])

目标是从x向量中移除8的倍数

Pau*_*tra 8

为此,您可以使用模运算符,即%%.举个例子:

> 322%%8
[1] 2
Run Code Online (Sandbox Code Playgroud)

它告诉你,在将322除以8之后,2仍然存在,即320正好是40乘以8,留下2.

在您的示例中,我们可以%%结合使用子集来获得8的倍数.请记住,%%对于8的精确倍数,产生0:

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
Run Code Online (Sandbox Code Playgroud)

还要注意,这%%是一个矢量化操作,即左手边是矢量,结果也是矢量.该multiple_of_8向量现在包含1000个逻辑,表明该特定元素是否input是8的精确倍数.使用该逻辑向量来获取您需要的结果:

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
Run Code Online (Sandbox Code Playgroud)

或者更紧凑:

input[(input %% 8) == 0]
Run Code Online (Sandbox Code Playgroud)