r - 在R data.table中创建虚拟变量

标签 r data.table dummy-variable

我正在使用R中的一个非常大的数据集,并且一直在使用数据帧进行操作,因此决定切换到data.tables以帮助加快操作速度。我在理解J操作时遇到了麻烦,特别是我试图生成虚拟变量,但是我不知道如何在data.tables []中编写条件操作的代码。

MWE:

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


我想做的是将列aj添加为伪变量,这样,当a1时,列index == "a"将具有值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     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


这是另一种方式:

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 )

关于r - 在R data.table中创建虚拟变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18881073/

相关文章:

r - 如何在 R 中绘制坐标(纬度/经度)数据并为其制作动画?

r - ifelse(在 data.table 中)如何工作

python - 当并非所有类别都存在于多个特征和数据集中时的虚拟变量

r - 我想检查 url 是否重定向到 R 中的另一个页面

r 多列减法

R data.table 点积与匹配的列名(每组)

R多列之间的多热编码

python - 如何从 corr() 函数输出中删除 NaN 值

r - 在带时间戳的事务的 data.table 中使用 zoo 的 rollsum

r - 向 data.table 添加新方法