如何对一个表的所有列同时分组求统计值

请问,想对一个表的所有列同时施加某个函数(比如求均值),应该如何操作?我这里的问题是,还需要做group by,所以直接avg(table)还不行,而且列很多,不想一个个列都写avg?类似下例伪代码:

t=table(`a`b`c as sym,1.0 1.1 1.3 as col1,1.0 1.1 1.3 as col2,1.0 1.1 1.3 as col3,1.0 1.1 1.3 as col4,1.0 1.1 1.3 as col5,1.0 1.1 1.3 as col6,...,1.0 1.1 1.3 as col1000 )
select avg(col1..col1000) from t group by sym



请先 登录 后评论

1 个回答

wale

可以用元编程的方法实现,例如下面定义了一个自定义函数:

def table_regroup(t, f, groupCol){
names = t.colNames()[t.colNames() != groupCol]
return sql(select=sqlCol(names, f), from=t, groupBy=sqlCol(groupCol), groupFlag=1).eval()
}
table_regroup(t, avg, "sym")

输出:

sym	col1	col2	col3	col4	col5	col6
a	1	1	1	1	1	1
b	1.1	1.1	1.1	1.1	1.1	1.1
c	1.3	1.3	1.3	1.3	1.3	1.3


请先 登录 后评论