R语言 行阵列的累积和

okxuctiv  于 2023-01-22  发布在  其他
关注(0)|答案(3)|浏览(147)

我有这个数据框:
| 事务ID|日数|预测值|
| - ------|- ------|- ------|
| 十二|1个|.001毫米|
| 十二|第二章|.002毫米|
| 十二|1个|.001毫米|
| 十二|第二章|.002毫米|
| 十三|1个|.001毫米|
| 十三|第二章|.002毫米|
| 十三|三个|.002毫米|
| 十三|四个|.003毫米|
我想根据连续的天数计算每组预测值的累积和(即前2行的累积和、后2行的累积和以及后4行的累积和)
因此结果将是.003、.003、.008

fhity93d

fhity93d1#

使用R碱基

sapply(split(df$Predicted_value,cumsum(c(1,diff(df$day_number)!=1))), sum)
   1     2     3 
0.003 0.003 0.008
4ktjp1zp

4ktjp1zp2#

使用this post的答案:

df %>%
  group_by(transaction_ID) %>%
  mutate(id = cumsum(c(1, diff(day_number) != 1))) %>%
  group_by(transaction_ID, id) %>%
  summarise(result=sum(Predicted_value))%>%
  ungroup

  transaction_ID    id result
           <int> <dbl>  <dbl>
1             12     1  0.003
2             12     2  0.003
3             13     1  0.008
y1aodyip

y1aodyip3#

根据所需的输出,它不是累计总和,而是按事务ID和日期组的总和。
使用data.table

dat = data.table(transID = c(12,...),
                 dayNum = c(1,2,...),
                 predVal = c(0.001, 0.002, ...))

# introduce a grouping column; each group starts when day == 1
dat[, 
    gr := cumsum(dayNum == 1)]

# aggregate
dat[,
    sum(predVal),
    by = gr]

    gr    V1
1:  1 0.003
2:  2 0.003
3:  3 0.008

相关问题