Мой вопрос связан с созданием переменной, которая зависит от других столбцов в таблице данных. Если ни одно из имен переменных не известно заранее.
Ниже приведен пример игрушки, где у меня есть 5 строк, а новая переменная должна быть 1, когда условие равно A и 4.
library(data.table)
DT <- data.table(Con = c("A","A","B","A","B"),
Eval_A = rep(1,5),
Eval_B = rep(4,5))
Col1 <- "Con"
Col2 <- "Eval_A"
Col3 <- "Eval_B"
Col4 <- "Ans"
Код ниже работает, но кажется, что я неправильно использую пакет!
DT[,Col4:=ifelse(DT[[Col1]]=="A",
DT[[Col2]],
DT[[Col3]]),with=FALSE]
Update: Спасибо, я немного ускорил ответы ниже. Однажды на data.table с 5 миллионами строк и только соответствующие столбцы и снова после добавления 10 не соответствующих столбцов ниже приведены результаты:
+-------------------------+---------------------+------------------+
| Method | Only relevant cols. | With extra cols. |
+-------------------------+---------------------+------------------+
| List method | 1.8 | 1.91 |
| Grothendieck - get/if | 26.79 | 30.04 |
| Grothendieck - get/join | 0.48 | 1.56 |
| Grothendieck - .SDCols | 0.38 | 0.79 |
| agstudy - Substitute | 2.03 | 1.9 |
+-------------------------+---------------------+------------------+
Похоже, что .SDCols лучше всего подходит для скорости и использует замену для легко читаемого кода.