向量的多少个值可以被 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)
还有其他方法可以使用运算符“%%”吗?
这里有三种不同的方式:
length(y[y %% 2 == 0])
length(subset(y, y %% 2 == 0))
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)
我有一个前任。我必须在哪里查看向量的多少个值可以被 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)
还有其他方法可以使用运算符“%%”吗?
这里有三种不同的方式:
length(y[y %% 2 == 0])
length(subset(y, y %% 2 == 0))
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)