小编jja*_*jap的帖子

R在data.table(或ddply)中动态构建"list"

我的聚合需求因列/ data.frames而异.我想动态地将"list"参数传递给data.table.

作为一个最小的例子:

require(data.table)
type <- c(rep("hello", 3), rep("bye", 3), rep("ok",3))
a <- (rep(1:3, 3))
b <- runif(9)
c <- runif(9)
df <- data.frame(cbind(type, a, b, c), stringsAsFactors=F)
DT <-data.table(df)
Run Code Online (Sandbox Code Playgroud)

这个电话:

DT[, list(suma = sum(as.numeric(a)), meanb = mean(as.numeric(b)), minc = min(as.numeric(c))), by= type]
Run Code Online (Sandbox Code Playgroud)

会有类似的结果:

    type suma     meanb      minc
1: hello    6 0.1332210 0.4265579
2:   bye    6 0.5680839 0.2993667
3:    ok    6 0.5694532 0.2069026
Run Code Online (Sandbox Code Playgroud)

未来的data.frames将有更多的列,我想要以不同的方式进行总结.但是为了使用这个小例子:有没有办法以编程方式传递列表?

我天真地尝试过:

# create a different list
mylist <- "list(lengtha = length(as.numeric(a)), maxb = max(as.numeric(b)), meanc = …
Run Code Online (Sandbox Code Playgroud)

r aggregation plyr data.table

12
推荐指数
4
解决办法
1876
查看次数

将表名传递给函数并返回表

我需要在数据库(PostgreSQL 9.3.5)的许多表上运行相同的查询,并将表名作为参数传递给函数似乎是一件逻辑的事情。通过阅读文档中的示例和众多SO帖子,我仍然无法确定。

使用以下最小示例:

CREATE TABLE films (
code        char(5),
kind        varchar(10)
);
INSERT INTO films VALUES
('UA502', 'Comedy');
Run Code Online (Sandbox Code Playgroud)

而这个功能:

CREATE OR REPLACE FUNCTION foo(_t text)
RETURNS void AS  -- I know, void is not what I am after
$func$
BEGIN
   EXECUTE format('SELECT count(*) FROM %I', _t);
END
$func$  LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

以下查询捕获了一些内容:

mydb=> SELECT foo('films');
 foo
-----
(1 row)
Run Code Online (Sandbox Code Playgroud)

但是,因为我要检索表,所以我编辑第二行并重新创建该函数,如下所示:

CREATE OR REPLACE FUNCTION foo(_t text)
RETURNS TABLE(count integer) AS
$func$
BEGIN
   EXECUTE format('SELECT count(*) FROM %I', _t);
END
$func$  LANGUAGE …
Run Code Online (Sandbox Code Playgroud)

postgresql plpgsql

1
推荐指数
1
解决办法
3081
查看次数

标签 统计

aggregation ×1

data.table ×1

plpgsql ×1

plyr ×1

postgresql ×1

r ×1