R 如何按列和行(如Excel中的透视表)求和值?

R 如何按列和行(如Excel中的透视表)求和值?,r,dataframe,dplyr,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

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

   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

您可以像这样使用
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 
库(tidyverse)
我的_数据集%>%
变异(日期=格式(日期,“%Y”))%>%
分组依据(日期、持续时间)%>%
汇总(金额=总和(金额))%>%
价差(持续时间、金额)
#一个tibble:11x11
#分组:日期[11]
日期'1``2``3``4``5``6``7``8``9``10`
1 2000不适用141。娜娜娜
2 2004年不适用119。NA NA 97.8 NA
3 2005 NA 146。0.532Na104。NA-10.7
4 2006年NA 26.5
5 2008年不适用68.9不适用131。NA 99.2
6 2012年NA 156。娜娜娜娜娜娜娜娜
7 2014年不适用76.1不适用147。娜娜娜
8 2015 NA 139。娜娜娜娜娜娜娜娜娜娜
9 2016   130.   NA NA 97.2 NA 92.2 NA NA
10 2017年NA 176。娜娜娜娜娜娜娜娜
11 2018年不适用121年不适用。娜娜

您可以像这样使用
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 
库(tidyverse)
我的_数据集%>%
变异(日期=格式(日期,“%Y”))%>%
分组依据(日期、持续时间)%>%
汇总(金额=总和(金额))%>%
价差(持续时间、金额)
#一个tibble:11x11
#分组:日期[11]
日期'1``2``3``4``5``6``7``8``9``10`
1 2000不适用141。娜娜娜
2 2004年不适用119。NA NA 97.8 NA
3 2005 NA 146。0.532Na104。NA-10.7
4 2006年NA 26.5
5 2008年不适用68.9不适用131。NA 99.2
6 2012年NA 156。娜娜娜娜娜娜娜娜
7 2014年不适用76.1不适用147。娜娜娜
8 2015 NA 139。娜娜娜娜娜娜娜娜娜娜
9 2016   130.   NA NA 97.2 NA 92.2 NA NA
10 2017年NA 176。娜娜娜娜娜娜娜娜
11 2018年不适用121年不适用。娜娜

@akrun注意:这个问题涉及聚合,而不仅仅是重塑。它可能是重复的,但不是标记的问题。@zack我重新打开。我没有收到你的消息,可能在
@
@akrun之前有一个空格。注意:这个问题涉及聚合,而不仅仅是重塑。它可能是重复的,但不是标记的问题。@zack我重新打开。我没有收到你的消息,可能是
@
前面有个空格,谢谢!成功了。如果我能再问一个问题。如果我有其他行类型的列,我如何筛选出某些行?请不要在评论中提出后续问题。我宁愿问一个新问题。非常感谢!成功了。如果我能再问一个问题。如果我有其他行类型的列,我如何筛选出某些行?请不要在评论中提出后续问题。而是问一个新问题。
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