在R data.table中创build虚拟variables

我正在使用R中的一个非常大的数据集,并且一直在使用dataframe,并决定切换到data.tables以帮助加速操作。 我无法理解的J操作,特别是我试图生成虚拟variables,但我不知道如何编码data.tables []内的条件操作。

MWE:

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

我想要做的就是将列aj添加为虚拟variables,使得列aindex == "a"时具有值1 ,否则为0 。 在data.frame环境中,它看起来像这样:

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

这似乎正在做你在找什么:

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

这使

  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 

这是另一种方式:

 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] 

另一个:

 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 )