factor
levels
明确规定
dt[, Number := factor(Number, levels = min(Number):max(Number))]
然后运行OP的代码
cumsumtable
# 1 2 3 4 5 6 7 8
#A 25% 25% 75% 100% 100% 100% 100% 100%
#B 40% 40% 40% 60% 80% 80% 80% 100%
这也可以通过数据实现。表列转换为后的方法
因素
dcast(dt[, .N,.(Name, Number)][, perc := 100*N/sum(N), Name],
Name ~ Number, value.var = 'perc', fill = 0, drop = FALSE)[,
(2:9) := lapply(Reduce(`+`, .SD, accumulate = TRUE),
function(x) paste0(x, "%")), .SDcols = -1][]
# Name 1 2 3 4 5 6 7 8
#1: A 25% 25% 75% 100% 100% 100% 100% 100%
#2: B 40% 40% 40% 60% 80% 80% 80% 100%