【发布时间】:2021-07-17 12:00:04
【问题描述】:
我尝试使用 sqldf 和 dplyr 实现 SQL 查询。
我需要使用这两个不同的库分别执行此操作。
不幸的是,我无法使用 dplyr 产生相同的结果。
library(sqldf)
library(dplyr)
Id <- c(1,2,3,4)
HasPet <- c(0,0,1,1)
Age <- c(20,1,14,10)
Posts <- data.frame(Id, HasPet, Age)
# sqldf way
ref <- sqldf("
SELECT Id, HasPet, MAX(Age) AS MaxAge
FROM Posts
GROUP BY HasPet
")
# dplyr way
res <- Posts %>%
group_by(HasPet) %>%
summarize(
Id,
HasPet,
MaxAge = max(Age)
) %>%
select(Id, HasPet, MaxAge)
head(ref)
head(res)
sqldf 的输出是:
> head(ref)
Id HasPet MaxAge
1 1 0 20
2 3 1 14
虽然 sqldf 的输出不同:
> head(res)
# A tibble: 4 x 3
# Groups: HasPet [2]
Id HasPet MaxAge
<dbl> <dbl> <dbl>
1 1 0 20
2 2 0 20
3 3 1 14
4 4 1 14
UPD。 SQL 查询无法修改。
【问题讨论】:
-
您希望
dplyr的确切输出是什么?为什么? -
@Tim Biegeleisen 这已在某些 R 课程中提出要求。我需要得到与 sqldf 产生的结果相同但使用 dplyr 的结果。这是通过测试的先决条件。