有没有一种简单的方法来获取数字的二进制向量?我想指定要使用的位数。
因此,例如,4位中的4位将返回c(F,T,F,F)
或6位c(F,F,F,T,F,F)
。
所以我想要创建的是这样的,但有大约8个因素(tx
)
library(ggplot2)
tx <- factor(c("a", "b", "c"))
ty <- rep(0:(2 ^ length(tx) - 1), each=length(tx))
df <- data.frame(x=tx, y=ty)
df$z <- c(F,F,F,F,F,T,F,T,F,F,T,T,T,F,F,T,F,T,T,T,F,T,T,T)
ggplot(df, aes(x, y, fill = z)) + geom_raster()
有人可以帮我吗?
答案 0 :(得分:2)
尝试
as.logical(rep(4,each=4)%/% (2^(3:0)) %%2)
#[1] FALSE TRUE FALSE FALSE
as.logical(rep(4,each=6)%/% (2^(5:0)) %%2)
#[1] FALSE FALSE FALSE TRUE FALSE FALSE
v1 <- c(4,9,10,0,5)
!!matrix(rep(v1,each=6)%/% (2^(5:0)) %%2, ncol=6, byrow=TRUE)
# [,1] [,2] [,3] [,4] [,5] [,6]
#[1,] FALSE FALSE FALSE TRUE FALSE FALSE
#[2,] FALSE FALSE TRUE FALSE FALSE TRUE
#[3,] FALSE FALSE TRUE FALSE TRUE FALSE
#[4,] FALSE FALSE FALSE FALSE FALSE FALSE
#[5,] FALSE FALSE FALSE TRUE FALSE TRUE
答案 1 :(得分:2)
这样的事情似乎也是有效的:
ff = function(x, n) rev(as.logical(intToBits(x))[seq_len(n)])
ff(4, 4)
#[1] FALSE TRUE FALSE FALSE
ff(4, 6)
#[1] FALSE FALSE FALSE TRUE FALSE FALSE
Vectorize(ff)(c(4,9,10,0,5), 6) ##to compare with akrun's
# [,1] [,2] [,3] [,4] [,5]
#[1,] FALSE FALSE FALSE FALSE FALSE
#[2,] FALSE FALSE FALSE FALSE FALSE
#[3,] FALSE TRUE TRUE FALSE FALSE
#[4,] TRUE FALSE FALSE FALSE TRUE
#[5,] FALSE FALSE TRUE FALSE FALSE
#[6,] FALSE TRUE FALSE FALSE TRUE