我正在尝试使用dplyr
和dbplyr
不将数据收集(拉入)到 R中的情况下与 Postgres 表交互。
如果表的格式类似于下面的 x,我如何计算我定义的分组中不同值的计数?
例如,这个例子是模仿我想做的事情:
# Would actually be x = tbl(src = "postgres_conn", "x")
x = data.frame(
a = c(1, 1, 2, 2, 3, 3),
b = c(1, 1, 1, 2, 2, 2),
c = c(1, 2, 3, 1, 2, 3)
)
> x
a b c
1 1 1 1
2 1 1 2
3 2 1 3
4 2 2 1
5 3 2 2
6 3 2 3
x %>% group_by(a, b) %>% mutate(Count = n_distinct(c))
# Results
# A tibble: 6 x 4
# Groups: a, b [4]
a b c Count
<dbl> <dbl> <dbl> <int>
1 1 1 1 2
2 1 1 2 2
3 2 1 3 1
4 2 2 1 1
5 3 2 2 2
6 3 2 3 2
如果我在 Postgres tbl 上使用 n_distinct(c),我会收到以下错误:DISTINCT 未针对窗口函数实现。
我尝试了 length(unique(c)),它返回了一个语法错误。
试
sql('COUNT(DISTINCT(c))')
给我这个错误:
column "c" does not exist. HINT: Perhaps you meant to reference the column "aresphukou.c."
但是, aresphukou 是一个任意临时表名称,每次运行查询时都会更改。
最后,我尝试replyr_uniqueValues
了,但它似乎忽略了所有 Count 值的分组和返回值 1。
谁能建议如何解决这个问题?