根据特定条件选择逻辑向量元素

时间:2017-01-13 03:19:19

标签: r vector subset

我有一种情况,我希望根据向量中每个位置的TRUE / FALSE组合检测两个逻辑命名向量之间的条件。例如:

x <- c(TRUE, FALSE, FALSE, TRUE)
names(x) <- c("a", "b", "c", "d")
y <- c(TRUE, TRUE, FALSE, FALSE)
names(y) <- names(x)

对于这两个向量中的每个元素,我想检测3个条件:

  • x[i]TRUEy[i]TRUE;
  • x[i]FALSEy[i]TRUE
  • x[i]TRUEy[i]FALSE

xy的长度相同,但可能比此示例更长。我想检索每个条件的元素名称,并将元素名称分配给新变量。对于这个例子:

v1 <- "a"
v2 <- "b"
v3 <- "d"

在这两个向量的较长版本中,我可能会得到类似的结果:

v1 <- c("a", "e")
v2 <- c("b", "f", "g")
v3 <- c("d", "i", "k", "l")

执行此操作的最佳矢量化方法是什么。我认为这很简单,但我无法得出答案。提前谢谢。

1 个答案:

答案 0 :(得分:3)

我们可以有效地使用Dim intScore As Integer Dim intNumOutput1 As Integer Dim intNumOutput2 As Integer Dim intBothOutputs As Integer Dim intNumInput As Integer ' The rest of your code Private Sub Form_Load() End Sub Private Sub cmdRollDice_Click() End Sub ' ' ,但在此之前,我们需要一个分组索引。这是一种可能性:

split

要了解上述分组索引,请考虑以下事项:

g <- x + y + x
split(names(x), g)

因此,您可以看到x <- c(TRUE, TRUE, FALSE, FALSE) y <- c(TRUE, FALSE, TRUE, FALSE) x + y + x #[1] 3 2 1 0 TRUE的4种组合被映射到4个整数值。

  

啊,所以“a”被分配给FALSE,“b”分配给T-T等等。但是,为什么T-F?我没有按两次添加x + y + x

如果您只x,结果只有0,1和2.您将无法区分x + yT-F,因为它们都是1。

@thelatemail提供了一种更易读的方式:

F-T

<强>更新

啊......愚蠢的我......为什么我要打扰split(names(x), interaction(x, y, drop=TRUE)) 。我突然想起我们可以将列表传递给g中的f参数:

split

注意,在split(names(x), list(x, y)) 内部:

split.default