gpt4 book ai didi

r - 根据另一列中的值和分组创建一个新的 r data.table 列

转载 作者:行者123 更新时间:2023-12-04 11:02:02 24 4
gpt4 key购买 nike

我有一个 data.table日期、邮政编码和购买金额。

library(data.table)
set.seed(88)
DT <- data.table(date = Sys.Date()-365 + sort(sample(1:100, 10)),
zip = sample(c("2000", "1150", "3000"),10, replace = TRUE),
purchaseAmount = sample(1:20, 10))

这将创建以下内容:
    date       zip              purchaseAmount
1: 2016-01-08 1150 5
2: 2016-01-15 3000 15
3: 2016-02-15 1150 16
4: 2016-02-20 2000 18
5: 2016-03-07 2000 19
6: 2016-03-15 2000 11
7: 2016-03-17 2000 6
8: 2016-04-02 1150 17
9: 2016-04-08 3000 7
10: 2016-04-09 3000 20

我想添加第四列 earlierPurchases .此栏应 sum purchaseAmount 中的所有值为以前的 x datezipcode .

编辑:根据 Frank 的建议,这是预期的输出:
          date  zip purchaseAmount new_col
1: 2016-01-08 1150 5 5
2: 2016-01-15 3000 15 15
3: 2016-02-15 1150 16 16
4: 2016-02-20 2000 18 18
5: 2016-03-07 2000 19 19
6: 2016-03-15 2000 11 30
7: 2016-03-17 2000 6 36
8: 2016-04-02 1150 17 17
9: 2016-04-08 3000 7 7
10: 2016-04-09 3000 20 27

有没有 data.table这样做的方法,或者我应该写一个循环 function ?

最佳答案

这似乎有效:

DT[, new_col := 
DT[.(zip = zip, d0 = date - 10, d1 = date), on=.(zip, date >= d0, date <= d1),
sum(purchaseAmount)
, by=.EACHI ]$V1
]


date zip purchaseAmount new_col
1: 2016-01-08 1150 5 5
2: 2016-01-15 3000 15 15
3: 2016-02-15 1150 16 16
4: 2016-02-20 2000 18 18
5: 2016-03-07 2000 19 19
6: 2016-03-15 2000 11 30
7: 2016-03-17 2000 6 36
8: 2016-04-02 1150 17 17
9: 2016-04-08 3000 7 7
10: 2016-04-09 3000 20 27

这使用“非对等”连接,有效地获取每一行;在 on= 中查找符合我们条件的所有行每行的表达式;然后按行求和( by=.EACHI )。在这种情况下,非对等连接可能比某些滚动求和方法效率低。

这个怎么运作。

要将列添加到 data.table,通常的语法是 DT[, new_col := expression] .在这里,该表达式实际上甚至在 DT[...] 之外也有效。 .尝试单独运行它:
DT[.(zip = zip, d0 = date - 10, d1 = date), on=.(zip, date >= d0, date <= d1), 
sum(purchaseAmount)
, by=.EACHI ]$V1

您可以逐步简化它,直到它只是连接...
DT[.(zip = zip, d0 = date - 10, d1 = date), on=.(zip, date >= d0, date <= d1), 
sum(purchaseAmount)
, by=.EACHI ]
# note that V1 is the default name for computed columns

DT[.(zip = zip, d0 = date - 10, d1 = date), on=.(zip, date >= d0, date <= d1)]
# now we're down to just the join

连接语法类似于 x[i, on=.(xcol = icol, xcol2 < icol2)] ,如您输入 ?data.table 时打开的文档页面中所述进入加载了 data.table 包的 R 控制台。

要开始使用 data.table,我建议查看 the vignettes .在那之后,这可能看起来更清晰。

关于r - 根据另一列中的值和分组创建一个新的 r data.table 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41450543/

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