从R中的所有可能组合中提取特定组合

时间:2016-09-15 09:12:13

标签: r vector combinations combn

给出以下长度为n=10的向量:

# [1] 0 0 0 0 0 1 0 0 1 0
vec <- c(0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L)

假设我们要将运算符&应用于向量元素的所有可能组合。那就是:

res <- combn(n, 2, function(v) vec[v[1]]&vec[v[2]])
# total number of possible combinations is n(n-1)/2 = 45

但是,我们知道&运算符的结果只有在两个值均为1时才为真,因此我们可以更聪明地完成它。实际上,combn的结果是长度为45的向量,只有一个1值,其余只有0

现在的问题是,如何在不应用1本身的情况下提取唯一combn的位置?一旦我们得到它,我们生成的结果如下:

res <- rep(0, 45)
res[index] <- 1

其中index是质疑的位置。

1 个答案:

答案 0 :(得分:0)

这个怎么样(假设向量中只有两个位置为1,其余为零):

vec <- c(0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L)

n <- length(vec)
pos <- which(vec==1)
index = ifelse(pos[1]==1, 0, sum((n-1):(n-pos[1]+1))) + (pos[2] - pos[1])
index
#[1] 38

res <- combn(n, 2, function(v) vec[v[1]]&vec[v[2]])
which(res==TRUE)
#[1] 38