在 R 中高效的 data.table 中更新一列两次

Bol*_*lle 4 performance readability r data.table mutate

我有一个看起来像这样的数据表:

DT <- data.table(Zeit = c(0.024, 0.4, 0.05),
                 Gier = c(1, 2, 3),
                 GierVZ = c(1, 0, 1),
                 Quer = c(2, 4, 6))
Run Code Online (Sandbox Code Playgroud)

现在我想更新并向这个数据表添加一些列。但是我无法更新Gier两次,因为它会创建重复项并出现错误。

DT[, ':='(Zeit   = round(Zeit, digits = 2),
          Gier   = replace(Gier, Gier == 163.83, NA),
          GierVZ = factor(GierVZ, levels = c(0, 1), labels = c("positiv", "negativ")),
          Quer   = Quer * 9.81,
          Gier   = ifelse(GierVZ == "negativ", Gier * -1, Gier))]
Run Code Online (Sandbox Code Playgroud)

一般如何避免这种情况并仍然创建一些可读的快速代码?我相信对此有一个简单的答案。但我是数据表的新手,我认为(至少目前)它不像 dplyr 那样直观,但它对于我的大数据要快得多。

use*_*748 6

您可以Gier在花括号中进行评估:

DT[, ':='(Zeit   = round(Zeit, digits = 2),
          Gier   = {Gier[Gier == 163.83] <- NA; ifelse(GierVZ, -Gier, Gier)},
          GierVZ = factor(GierVZ, levels = c(0, 1), labels = c("positiv", "negativ")),
          Quer   = Quer * 9.81)]
Run Code Online (Sandbox Code Playgroud)