R:按列名称向量的数据表组

时间:2017-07-31 08:00:23

标签: r data.table

示例数据:

set.seed(1)
dt <- data.table(a = sample(c("a", "b"), 25, replace = T), b = sample(c("c", "d"), 25, replace = T), c = runif(25))
nodes <- c("a", "b")
metric <- "c"

想法是将分组列作为动态变量。 <{1}}中传递给by参数的列名计数未知。

预期输出(通过在函数中使用固定名称):

data.table

转到dt[,.(Count = .N, Avg = mean(get(metric))),.(a,b)] a b Count Avg 1: a c 4 0.5622371 2: b c 7 0.4535460 3: b d 6 0.5033865 4: a d 8 0.3872618 函数只返回节点对象中的第一个参数:

get()

可以dt[,.(Count = .N, Avg = mean(get(metric))),.(get(nodes))] get Count Avg 1: a 12 0.4455869 2: b 13 0.4765493 逐个命名并获得正确的结果:

get

但正如我所陈述的那样 - 事先并不知道这些变量的数量。

1 个答案:

答案 0 :(得分:2)

我们可以仅使用nodes指定分组变量,并使用列来指定.SDcols

中的均值
dt[, .(Count = .N, Avg = mean(.SD[[1]])), by = nodes, .SDcols = metric]
#   a b Count       Avg
#1: a c     4 0.5622371
#2: b c     7 0.4535460
#3: b d     6 0.5033865
#4: a d     8 0.3872618