使用.SD在R data.table中一次创建多个百分比变量的奇怪问题

时间:2014-08-26 18:42:51

标签: r data.table

我有一堆变量我试图在data.table中转换为百分比(存储为新变量);因为它不是表中的每一列,所以我使用.SD& .SDcols快速完成此任务。

这里是我尝试过的基础知识,我认为可行:

pct_cols <- c("x","y","z") #s.t. x+y+z=total, for example
dt[ , paste0(pct_cols, "_pct") := .SD/total, .SDcols=pct_cols]

然而,这吐在我身上:

  

eval(expr, envir, enclos)中的错误:找不到对象total

然而,当我稍微调整第二行时,它可以工作:

dt[ , paste(pct_cols, "pct", sep="_") := .SD/dt$total, .SDcols=pct_cols]

知道为什么第一个版本没有用?

1 个答案:

答案 0 :(得分:2)

问题#495现已通过this recent commit解决,我们现在可以做到这一点:

require(data.table) # v1.9.7+
dt = data.table(x=1:5, y=6:10, z=11:15, total=1:5 + 6:10 + 11:15)
pct_cols <- c("x", "y", "z") #s.t. x+y+z=total, for example
dt[ , paste0(pct_cols, "_pct") := .SD/total, .SDcols=pct_cols][]
#    x  y  z total      x_pct     y_pct     z_pct
# 1: 1  6 11    18 0.05555556 0.3333333 0.6111111
# 2: 2  7 12    21 0.09523810 0.3333333 0.5714286
# 3: 3  8 13    24 0.12500000 0.3333333 0.5416667
# 4: 4  9 14    27 0.14814815 0.3333333 0.5185185
# 5: 5 10 15    30 0.16666667 0.3333333 0.5000000