variable paquete how generar funcion dummy dummies define create categorical r data.table dummy-variable

paquete - Creando variables ficticias en R data.table



paquete dummies r (1)

Esto parece hacer lo que estás buscando:

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

lo que da

index var1 a b c d e f g h i j 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

Aquí hay otra manera:

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]

Y otro:

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 )

Estoy trabajando con un conjunto de datos extremadamente grande en R y he estado operando con marcos de datos y he decidido cambiar a data.tables para ayudar a acelerar las operaciones. Tengo problemas para entender las operaciones J, en particular estoy tratando de generar variables ficticias, pero no puedo averiguar cómo codificar operaciones condicionales dentro de data.tables [].

MWE:

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

Lo que me gustaría hacer es agregar columnas a través de j como variables ficticias, de modo que la columna a tenga un valor 1 cuando el index == "a" y 0 caso contrario. En el entorno data.frame se vería algo así como:

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