R data.table按名称存储在变量中的列引用的分组总和

时间:2019-01-29 22:14:26

标签: r data.table

问题如下:我有一个data.table,其中包含A和B列。摘要是必需的,其名称作为字符向量传递到变量var1中。

我已经尝试寻找答案一段时间了,例如thisthis这样的帖子。无法找到合适的解决方案,我不得不问这个问题。

现在我想做的是(使用data.frame)

tmp[, var1] <- rep(1, nrow(tmp))
tmp <- aggregate(formula(paste(var1, "~ A + B")), tmp, sum)

但我最后一次尽力而为的是无法使用data.table

tmp <- tmp[, list(..var1 = .N), by = list(A, B)]

现在,我的代码有什么问题以及如何解决?

请注意,我不想使用:=运算符,因为我希望结果与聚合()中的结果完全一样。

编辑1:一个有效的示例:

library(data.table)
tmp <- data.table(A=c("R","G","G","B","B","B"), B=c(1,1,1,2,1,2))
print(tmp)

var1 <- "C"

tmp[, var1] <- rep(1, nrow(tmp))
tmp2 <- aggregate(formula(paste(var1, "~ A + B")), tmp, sum)
print(tmp2)

tmp3 <- tmp[, list(..var1 = .N), by = list(A, B)]
print(tmp3)

1 个答案:

答案 0 :(得分:2)

希望我没有误读您的qn。以下是一些选项:

1)使用base::setNames

DT[, setNames(.(.N), var1), by=.(A, B)]

2)使用data.table::setnames

setnames(DT[, .N, by=.(A, B)], "N", var1)[]

3),先后依次使用base::structurebase::as.list

DT[, as.list(structure(.N, names=var1)), by=.(A, B)]

数据:

DT <- data.table(A=c(1,1,2,2), B=c(1,1,2,3))
var1 <- "myCol"