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
答案 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)
。