【发布时间】:2017-08-02 17:15:19
【问题描述】:
我有一个如下表: df
KEY CAT DATE AMOUNT VAR VALUE
1 26 2015/10/1 1400 Event.Budget_Cat26 NA
1 26 2015/10/1 300 Event.Budget_Cat26 NA
1 26 2015/10/1 NA NA NA
1 22 2015/10/1 100 Event.Budget_Cat22 NA
1 22 2015/10/1 300 Event.Budget_Cat22 NA
1 22 2015/10/1 NA NA NA
2 21 2014/1/1 200 Event.Budget_Cat21 NA
2 21 2014/1/1 NA NA NA
这只是大桌子的一部分。基本上,每一行都是唯一的(KEY,CAT,DATE)。我想找到一种方法来计算基于唯一标识的金额总和,并将最终总和放入 VALUE 列。 此外,为 VAR 命名。 AMOUNT 列仅存在于 VALUE 列中,最后我将删除整个列,所以保留它,因为 NA 是可以的。
最终的结果会是这样的
KEY CAT DATE AMOUNT VAR VALUE
1 26 2015/10/1 1400 Event.Budget_Cat26 NA
1 26 2015/10/1 300 Event.Budget_Cat26 NA
1 26 2015/10/1 NA Scalar.Budget_Cat26_Amt 1700
1 22 2015/10/1 100 Event.Budget_Cat22 NA
1 22 2015/10/1 300 Event.Budget_Cat22 NA
1 22 2015/10/1 NA Scalar.Budget_Cat22_Amt 400
2 21 2014/1/1 200 Event.Budget_Cat21 NA
2 21 2014/1/1 NA Scalar.Budget_Cat21_Amt 200
我尝试了rbind和lapply,但结果不是我想要的
df[, 4:6 := lapply(.SD,
function(x) replace(x, is.na(x), c("",paste("Scalar_Budget_Cat",CAT,"_Amt",sep =""),sum(x, na.rm=TRUE))),
KEY, .SDcols=4]
谁能帮我找出一种快速遍历包含 2,600,000 行的整个数据表的方法?谢谢你
【问题讨论】:
-
不确定它是否很快,但请尝试
df[, VALUE:=sum(AMOUNT, na.rm = T),by=list(KEY, CAT, DATE)][is.na(VAR), VAR:=paste0("Scalar_Budget_Cat",CAT,"_Amt"),]
标签: r data.table