R R中是否存在类似SQL中的EXISTS?

时间:2016-10-05 15:05:55

标签: r exists sqldf

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,如果表 x1 x0 EXISTS中的值,则为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

1 个答案:

答案 0 :(得分:2)

试试这个:

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

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

!(x0$a %in% x1$a) + 0L返回布尔值的原因,而不是整数是由运算符优先级引起的。否定最后应用。尝试将它移动到右边的一个位置作为parens中的第一个内容:(!x0$a %in% x1$a) + 0L

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