R R 中是否存在 SQL 中的 EXISTS 之类的东西?

R Does something like EXISTS in SQL exists in R?

EXISTS/NOT EXISTS 是 SQL 中非常强大的功能。 有没有一种方法可以使用 R 命令或函数来执行 SQL 中的 EXISTS?示例:

# Two tables
x0 <- data.frame(a=rep(1:4,2))
x1 <- data.frame(a=c(2,2,3,5))

我想要一个新指标 b 如果 x0 中的值存在于 table x1 中则为 1 否则为 0 .

# Initialize b
x0$b <- 0   

# Update b 
sqldf(c("UPDATE x0
         SET b = 1
         WHERE EXISTS (SELECT 1
                       FROM x1
                       WHERE x0.a = x1.a
                      )"
        , "SELECT * FROM main.x0"
        )
      )

结果:

  a b
1 1 0
2 2 1
3 3 1
4 4 0
5 1 0
6 2 1
7 3 1
8 4 0

试试这个:

x0$b <- (x0$a %in% x1$a) + 0L

使用 0L 而不是 0 主要是我有点迂腐;它确保一切都保持为整数而不是数字(双精度)。

!(x0$a %in% x1$a) + 0L returns 布尔值而不是整数的原因是运算符优先级。最后应用否定。尝试将它向右移动一个位置作为括号内的第一件事:(!x0$a %in% x1$a) + 0L

正如@Roland 指出的那样,如果您发现整个 + 0L 有点太聪明以至于不清楚,您可以随时做 as.integer(x0$a %in% x1$a).