【发布时间】:2021-07-19 17:09:01
【问题描述】:
我尝试使用 sqldf 和 data.table 实现 SQL 查询。
我需要使用这两个不同的库分别执行此操作。
不幸的是,我无法使用 data.table 产生相同的结果。
library(sqldf)
library(data.table)
Id <- c(1,2,3,4)
HasPet <- c(0,0,1,1)
Age <- c(20,1,14,10)
Posts <- data.table(Id, HasPet, Age)
# sqldf way
ref <- sqldf("
SELECT Id, HasPet, MAX(Age) AS MaxAge
FROM Posts
GROUP BY HasPet
")
# data.table way
res <- Posts[,
list(Id, HasPet, MaxAge=max(Age)),
by=list(HasPet)]
head(ref)
head(res)
sqldf 的输出是:
> head(ref)
Id HasPet MaxAge
1 1 0 20
2 3 1 14
虽然 data.table 的输出不同:
> head(res)
HasPet Id HasPet MaxAge
1: 0 1 0 20
2: 0 2 0 20
3: 1 3 1 14
4: 1 4 1 14
请注意,不能修改 SQL 查询。
【问题讨论】:
-
GROUP BY 查询无效,预计会引发异常。
-
一个小标题?这不是
data.table的输出。 -
@jarlh 这个 SQL 查询是在一些 R 课程中给出的。在我看来,这是正确的。无论如何,它适用于 sqldf。
-
@StéphaneLaurent 现在 class(res) 打印 [1] "data.table" "data.frame"。
标签: sql r data.table sqldf