gpt4 book ai didi

r - Data.table 分配子集 dt[, x[.N] := z, y]

转载 作者:行者123 更新时间:2023-12-04 09:10:52 27 4
gpt4 key购买 nike

我有一些数据表:

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)来完成我所做的事情?

最佳答案

当然,对于分配给每个组的第一个或最后一个值的特殊情况,您可以使用 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 .

关于r - Data.table 分配子集 dt[, x[.N] := z, y],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50821561/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com