代码之家  ›  专栏  ›  技术社区  ›  rebeca

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

  •  1
  • rebeca  · 技术社区  · 9 年前

    我有一个例子,我必须看到一个向量有多少个值可以被2整除。我有一个随机样本:

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

    我创建了一个新变量d,以查看哪些值可被2整除或不可被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)
    

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

    3 回复  |  直到 9 年前
        1
  •  4
  •   Jthorpe    9 年前

    可以对mod运算符求和,如下所示: sum(1-y%%2) sum(y%%2 == 0) 。注意: x %% 2 是除以2后的余数,这就是为什么这个解决方案有效。

        2
  •  2
  •   JasonAizkalns    9 年前

    这里有三种不同的方式:

    1. length(y[y %% 2 == 0])
    2. length(subset(y, y %% 2 == 0))
    3. length(Filter(function(x) x %% 2 == 0, y))
        3
  •  2
  •   Alberto    9 年前

    既然我们讨论的是除以2,我实际上会把它放到位级别,检查数字的最后一位是0还是1(0表示它可以被2整除)。

    这里有一个问题(不确定编译器如何处理2的除法),但认为这可能比除法更优化,因为除法通常相当昂贵。

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

    bitwAnd(a, b)