如何在Excel中通过数据透视表等列和行求和?

时间:2019-05-16 15:06:24

标签: r dataframe dplyr

我有一个包含三列的数据集。示例数据在下面的代码中。

   Duration Amounts      Dates
1         9 -10.735 2017-07-30
2         4 156.247 2001-12-04
3         7  97.753 2014-02-12
4         1  99.190 1999-01-22
5         2 147.192 2014-12-25
6         7 141.061 2015-01-18
7         2 129.695 2016-05-07
8         3 145.949 2014-01-12
9         1 139.107 2017-03-09
10        5 103.728 2002-02-01
11        5   0.532 2001-09-09
12       10 130.991 2003-11-26
13        6  97.194 2014-05-13
14       10  92.210 2009-09-14
15        7  26.462 2014-09-14
16        9  76.092 2003-06-27
17        5 120.897 2012-07-09
18        5 167.934 2000-04-09
19        9  94.861 2012-12-09
20        9 119.384 2014-06-15
n <- 20
set.seed(1)        
Duration <- sample(10,size=n,replace=TRUE)
Amounts <- rnorm(n,100,50)
Dates <- sample(seq(as.Date('1999/01/01'), as.Date('2019/01/01'), by="day"), n,replace = TRUE)

My_Dataset <- data.frame(Duration,Amounts,Dates)

我想将“日期”列中的“年份”列和“持续时间”列中的“索引”相加。

我希望看到结果以例如条目18如下所示:

      1   2   3   4   5 ...
2000  x   x   x   x   167.9
2001  x   x   x   x   x
2002  x   x   x   x   x
...

1 个答案:

答案 0 :(得分:1)

您可以像这样使用tidyverse包:

library(tidyverse)

    My_Dataset %>% 
      mutate(Dates = format(Dates, "%Y")) %>% 
      group_by(Dates, Duration) %>% 
      summarise(Amounts = sum(Amounts)) %>% 
      spread(Duration, Amounts)


 # A tibble: 11 x 11
# Groups:   Dates [11]
   Dates   `1`   `2`   `3`     `4`   `5`   `6`   `7`   `8`   `9`  `10`
   <chr> <dbl> <dbl> <dbl>   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1 2000    NA    NA    NA   NA      NA    NA    141.  NA    NA    NA  
 2 2004    NA    NA    NA  119.     NA    NA     NA   NA    97.8  NA  
 3 2005    NA    NA   146.   0.532  NA    NA    104.  NA    NA   -10.7
 4 2006    NA    NA    NA   NA      NA    NA     NA   NA    NA    26.5
 5 2008    NA    NA    NA   NA      NA    68.9   NA  131.   NA    99.2
 6 2012    NA    NA   156.  NA      NA    NA     NA   NA    NA    NA  
 7 2014    NA    NA    NA   76.1    NA    NA    147.  NA    NA    NA  
 8 2015    NA   139.   NA   NA      NA    NA     NA   NA    NA    NA  
 9 2016   130.   NA    NA   NA      97.2  NA     NA   92.2  NA    NA  
10 2017    NA    NA   176.  NA      NA    NA     NA   NA    NA    NA  
11 2018    NA    NA    NA   NA      NA    NA     NA  121.   NA    NA