R中的条件和data.table
Conditional sum data.table in R
我尝试实现以下看起来像 但不一样的东西。如果日期大于该行上的日期,我想求和并表示来自同一 id 的所有值。对于第 3 行,这意味着:61+61+57=179
和第 4 行:61+57=118
对于相同行的平均值:(61+61+57)/3
、(51+57)/2
或额外列的加权平均值。
library(data.table)
set.seed(123)
DT<-data.table(date=rep(c(2015:2020),3),
value=round(runif(18,20,120)),
id=rep(c("a","b","c"),each=6))
DT
date value id
1: 2015 52 a
2: 2016 43 a
3: 2017 34 a
4: 2018 61 a
5: 2019 61 a
6: 2020 57 a
7: 2015 35 b
8: 2016 34 b
9: 2017 43 b
10: 2018 67 b
11: 2019 47 b
12: 2020 106 b
13: 2015 25 c
14: 2016 64 c
15: 2017 100 c
16: 2018 32 c
17: 2019 76 c
18: 2020 41 c
我试过这个:
DT[,sum_value:=sum(value[date>date[1]]),by=id]
但这不起作用。非常感谢任何帮助。
假设每个 id 没有重复的日期,并且如果您不需要初始订单,则可以使用:
setorder(DT, id, -date)
DT[, x := cumsum(value)-value, by = id]
要计算以前日期的 mean
,您可以使用:
DT[, z := (cumsum(value)-value)/(seq_len(.N)-1L), by = id]
我尝试实现以下看起来像 61+61+57=179
和第 4 行:61+57=118
对于相同行的平均值:(61+61+57)/3
、(51+57)/2
或额外列的加权平均值。
library(data.table)
set.seed(123)
DT<-data.table(date=rep(c(2015:2020),3),
value=round(runif(18,20,120)),
id=rep(c("a","b","c"),each=6))
DT
date value id
1: 2015 52 a
2: 2016 43 a
3: 2017 34 a
4: 2018 61 a
5: 2019 61 a
6: 2020 57 a
7: 2015 35 b
8: 2016 34 b
9: 2017 43 b
10: 2018 67 b
11: 2019 47 b
12: 2020 106 b
13: 2015 25 c
14: 2016 64 c
15: 2017 100 c
16: 2018 32 c
17: 2019 76 c
18: 2020 41 c
我试过这个:
DT[,sum_value:=sum(value[date>date[1]]),by=id]
但这不起作用。非常感谢任何帮助。
假设每个 id 没有重复的日期,并且如果您不需要初始订单,则可以使用:
setorder(DT, id, -date)
DT[, x := cumsum(value)-value, by = id]
要计算以前日期的 mean
,您可以使用:
DT[, z := (cumsum(value)-value)/(seq_len(.N)-1L), by = id]