具有子集dt [,x [.N]:= z,y]的Data.table赋值

时间:2018-06-12 16:08:20

标签: r data.table

我有一些data.table:

dt <- data.table(smth = 1:6, type = rep(c("cat", "dog"), each = 3))
dt
   smth type
1:    1  cat
2:    2  cat
3:    3  cat
4:    4  dog
5:    5  dog
6:    6  dog

我想对它进行一些转换:

dt[,  smth := c(smth[1:2], max(smth[1:2])), type]
dt
   smth type
1:    1  cat
2:    2  cat
3:    2  cat
4:    4  dog
5:    5  dog
6:    5  dog
# Could also do this
dt[1:nrow(dt) %% 3 == 0, smth := dt[,  max(smth[1:2]), type]$V1]

如果我能做一些像

这样的事情会更干净
dt[,  smth[3] := max(smth[1:2]), type] # Results in error

我的问题

我想象的类型的分配是否可行?如果不是:什么是更清洁的方式(坚持data.table)来做我已经做过的事情?

1 个答案:

答案 0 :(得分:3)

当然,对于为每个组分配第一个或最后一个值的特殊情况,您可以使用mult=的更新联接:

# Make a table containing the values you want to assign
mdt = dt[, .(msm = max(smth[-.N])), by=type]

# Update join
dt[mdt, on=.(type), mult="last", smth := i.msm]

   smth type
1:    1  cat
2:    2  cat
3:    2  cat
4:    4  dog
5:    5  dog
6:    5  dog

对于子集的更一般分配,有一个open FR