Creazione di variabili fittizie in R data.table

Sto lavorando con un set di dati estremamente grande in R e ho operato con i frame di dati e ho deciso di passare a data.tables per velocizzare le operazioni. Ho difficoltà a capire le operazioni di J, in particolare sto cercando di generare variabili dummy ma non riesco a capire come codificare le operazioni condizionali all’interno di data.tables [].

MWE:

test <- data.table("index"=rep(letters[1:10],100),"var1"=rnorm(1000,0,1)) 

Quello che vorrei fare è aggiungere le colonne a a j come variabili dummy tali che la colonna a abbia un valore 1 quando l’ index == "a" e 0 altrimenti. Nell’ambiente data.frame sembrerebbe qualcosa di simile:

 test$a <- 0 test$a[test$index=='a'] <- 1 

    Questo sembra fare ciò che stai cercando:

     inds <- unique(test$index) test[, (inds) := lapply(inds, function(x) index == x)] 

    che dà

      index var1 abcdefghij 1: a 0.25331851 TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 2: b -0.02854676 FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 3: c -0.04287046 FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 4: d 1.36860228 FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE 5: e -0.22577099 FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE --- 996: f -1.02040059 FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE 997: g -1.31345092 FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE 998: h -0.49448088 FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE 999: i 1.75175715 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE 1000: j 0.05576477 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE 

    Ecco un altro modo:

     dcast(test, index + var1 ~ index, fun = length) # or, if you want to preserve row order dcast(test[, r := .I], r + index + var1 ~ index, fun = length)[, r := NULL] 

    E un altro:

     rs = split(seq(nrow(test)), test$index) test[, names(rs) := FALSE ] for (n in names(rs)) set(test, i = rs[[n]], j = n, v = TRUE )