data.table根据变量分配新列

时间:2019-11-28 13:11:38

标签: r data.table

对此question的后续行动,data.table可以引用DT中的变量来创建新列吗?

另一个问题想要转成这张桌子:

library(data.table)
dt <- data.table(
  dates = c("2017-01-01", "2017-01-02", "2017-01-03", "2017-01-04", "2017-01-05"),
  yes_no = c(0, 1, 0, 1, 1) 
)
        dates yes_no
1: 2017-01-01      0
2: 2017-01-02      1
3: 2017-01-03      0
4: 2017-01-04      1
5: 2017-01-05      1

对此:

        dates yes_no 2017-01-02 2017-01-04 2017-01-05
1: 2017-01-01      0          0          0          0
2: 2017-01-02      1          1          0          0
3: 2017-01-03      0          0          0          0
4: 2017-01-04      1          0          1          0
5: 2017-01-05      1          0          0          1

我想按引用更新,但不知道如何根据data.table中的内容创建新列。也就是说,:=运算符的LHS似乎不在data.table环境中查看,这导致此操作失败:

## tried
dt[yes_no == 1, as.character(dates) := as.data.frame(diag(.N))]
  

eval(lhs,parent.frame(),parent.frame())中的错误:     找不到对象“日期”

## used:
ind <- dt[['yes_no']] != 0
cols <- as.character(dt[['dates']])[ind]

dt[, (cols) := 0L]
dt[ind, (cols) := as.data.frame(diag(.N))]
## also valid
# set(d, which(ind), cols, as.data.frame(diag(length(cols))))

是否有更直接的方法可以完成这项工作?

dt[yes_no == 1, as.character(dates) := as.data.frame(diag(.N))]

1 个答案:

答案 0 :(得分:3)

不漂亮,但您可以这样做:

dt[yes_no == 1, 
   (dt[yes_no == 1, as.character(dates)]) := as.data.table(diag(.N))]
相关问题