r - 使用 .SD 在 R data.table 中同时创建多个百分比变量的奇怪问题

标签 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]

但是,这对我来说很糟糕:

Error in eval(expr, envir, enclos) : object total not found

但是,当我对第二行进行轻微调整时,它起作用了:

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

知道为什么第一个版本不起作用吗?

最佳答案

问题#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

关于r - 使用 .SD 在 R data.table 中同时创建多个百分比变量的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25512992/

相关文章:

r - 在 R 中的 .Options$repos 中列出多个存储库有何影响或值(value)?

C 或 fortran 库无法在 R 中加载

r - 如何在 data.table 中迭代

R:计算一组子集的均值

r - 按连续出现的值分组

r - 如何更改 ggplot 中的标签(图例)?

r - 安装 TM 包时依赖项 ‘slam’ 不可用

r - 根据数据框中的自定义规则计算总和

r - 使用 R 中的 Grepl 查找数据框列中存在的单词列表

r - 使用 fread 和 awk 子集许多 .dat.gz 文件