我正在尝试对我的 postgres 数据库使用 dplyr 并执行一个简单的函数。
如果我直接解析列名,一切都会正常,但是我想动态地执行此操作(即对另一个数据帧中的每个列名进行排序)
我遇到的问题是对于前两个计算,我得到了正确的结果
假设第一个动态列称为“id”
pull_table %>%
summarise(
row_count = n(),
distinct_count = n_distinct(var) ,
distinct_count_minus_blank = n_distinct(ifelse(var=="",NA,var)),
maxvalue = max(var),
minvalue = min(var),
maxlength = max(length(var)),
minlen = min(length(var))
) %>%
show_query()
当你看到 sql 时,我得到的错误结果是显而易见的 - 有时 id 周围有 '' 所以它作为字符串计算:
<SQL>
SELECT
COUNT(*) AS "row_count",
COUNT(DISTINCT id) AS "distinct_count",
COUNT(
DISTINCT CASE
WHEN ('id' = '') THEN (NULL)
WHEN NOT('id' = '') THEN ('id')
END) AS "distinct_count_minus_blank",
MAX('id') AS "maxvalue",
MIN('id') AS "minvalue",
MAX(LENGTH('id')) AS "maxlength",
MIN(LENGTH('id')) AS "minlen"
FROM "table"
从这个输出中您可以看到,有时计算发生在列上,但有时只发生在字符串“id”上。这是为什么?如何修复它,以便它根据实际列而不是字符串进行计算?