向量的多少个值可以被 2 整除?使用 R

How many values of a vector are divisible by 2? Use R

我有一个前任。我必须在哪里查看向量的多少个值可以被 2 整除。我有这个随机样本:

set.seed(1)
y <- sample(c(0:99, NA), 400, replace=TRUE)

我创建了一个新变量 d 来查看哪些值可以被 2 整除:

d <- y/2 ; d

我想做的是创建一个逻辑论证,其中所有数字都为真,其余为假。 (例如:22.0 -> 真 & 24.5 -> 假)

我使用了这个命令,但我认为答案是错误的,因为它只会给我样本中的数字:

sum(d %in% y, na.rm=T) 

这个我也试过了(网上找的,但不是很懂)

is.wholenumber <- function(x, tol = .Machine$double.eps^0.5)  abs(x - round(x)) < tol
sum(is.wholenumber(d),na.rm = T)

还有其他方法可以使用运算符“%%”吗?

这里有三种不同的方式:

  1. length(y[y %% 2 == 0])
  2. length(subset(y, y %% 2 == 0))
  3. length(Filter(function(x) x %% 2 == 0, y))

您可以像这样对 mod 运算符求和:sum(1-y%%2)sum(y%%2 == 0)。请注意,x %% 2 是除以 2 后的余数,这就是此解决方案有效的原因。

因为我们讨论的是除以 2,所以我实际上会把它带到位级别并检查数字的最后一位是 0 还是 1(0 表示它可以被 2 整除).

在这里有点冒险(不确定编译器如何处理除以 2)但认为这可能比除法更优化,除法通常相当昂贵。

要在位级别执行此操作,您可以在数字本身和 1 之间进行 AND 运算,如果结果为 1,则表示不能被 2 整除:

bitwAnd(a, b)