如何从R

时间:2015-11-07 09:54:57

标签: r vector

我有一个矢量让我们说

x <- 1:1000

我想从中提取8的倍数。

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

目标是从x向量

中删除8的倍数

1 个答案:

答案 0 :(得分:9)

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

> 322%%8
[1] 2

告诉你,在将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

还注意到%%是矢量化操作,即左手侧是矢量,结果也是矢量。 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

或更紧凑:

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