data.table: Maneira correta de criar uma variável condicional quando os nomes das colunas não são conhecidos?
Minha pergunta refere-se à criação de uma variável que depende de outras colunas dentro de um data.table quando nenhum dos nomes de variáveis é conhecido antecipadamente.
Abaixo está um exemplo de brinquedo onde eu tenho 5 linhas e a nova variável deve ser 1 quando a condição é igual a A e 4 em sentido contrário.
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"
O código abaixo funciona, mas parece que estou usando mal o pacote!
DT[,Col4:=ifelse(DT[[Col1]]=="A",
DT[[Col2]],
DT[[Col3]]),with=FALSE]
Atualizar: Obrigado, eu fiz algumas temporizações rápidas das respostas abaixo. Uma vez em um data.table com 5 milhões de linhas e apenas as colunas relevantes e novamente depois de adicionar 10 colunas não relevantes, abaixo estão os resultados:
+-------------------------+---------------------+------------------+
| 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 |
+-------------------------+---------------------+------------------+
Parece que o .SDCols é melhor para velocidade e usa substituto para código fácil de ler.