样本数据:R:数据表组按列名称矢量
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"
想法是有分组列作为动态变量。在data.table
内传递给by
参数的列名的计数未知。
预期输出(通过使用函数内固定名称):
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
名一个接一个,并得到正确的结果:
dt[,.(Count = .N, Avg = mean(get(metric))),.(get(nodes[1]), get(nodes[2]))]
get get.1 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
但是正如我所说的那样 - 这些变量的数量事先不知道。
你几乎有:'DT [(计数= .N,平均=平均(拿到(公式))),mget(nodes)]' – Roland
你能解释'。(mget(nodes))'和'mget(nodes)'之间的区别吗?我有一种印象,'。(...)'''by''参数的符号应该是一个传递多个参数的简便方法。 –
'.'是'list'的别名。 'mget'已经返回一个列表。 – Roland