【问题标题】:Cumulative Sum over an Dataframe [duplicate]数据框的累积和[重复]
【发布时间】:2021-11-02 09:51:50
【问题描述】:

我想创建一个多年来的累积总和,总是遍历行,并添加其他项目。

# TEST
data <- data.frame(
  `Delivery Year` = c('1976','1977','1978','1979'),
  `Year.1976` = c(10,3,8,0),
  `Year.1977` = c(5,0,5,0),
  `Year.1978` = c(10,10,0,0),
  `Year.1979` = c(13,0,0,14)
)

data


# DESIRED
data <- data.frame(
  `Delivery Year` = c('1976','1977','1978','1979'),
  `Year.1976` = c(10,3,8,0),
  `Year.1977` = c(15,3,13,0),
  `Year.1978` = c(25,13,13,0),
  `Year.1979` = c(38,13,13,14)
)

data

【问题讨论】:

  • data.frame("Delivery Year"=data[,1],t(apply(data[,-1],1,cumsum)))

标签: r


【解决方案1】:

这行得通吗:

library(dplyr)
library(tidyr)

data %>% pivot_longer(-1) %>% group_by(Delivery.Year) %>% 
  mutate(value = cumsum(value)) %>% 
    pivot_wider(Delivery.Year, names_from = name, values_from = value)

# A tibble: 4 x 5
# Groups:   Delivery.Year [4]
  Delivery.Year Year.1976 Year.1977 Year.1978 Year.1979
  <chr>             <dbl>     <dbl>     <dbl>     <dbl>
1 1976                 10        15        25        38
2 1977                  3         3        13        13
3 1978                  8        13        13        13
4 1979                  0         0         0        14

【讨论】:

  • 是的,这适用于测试 df,当我们不考虑 Delivery.Year 列时,您能告诉我该怎么做吗? (对于我的完整 df)谢谢
  • 你的意思是你不想被任何列分组?如果是这样,那么您可以删除 group_by(Delivery.Year) 部分
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-04
  • 2017-03-23
相关资源
最近更新 更多