gruped变量的行和之和

时间:2017-11-03 19:29:06

标签: r dplyr

我想用变量dfnumber

创建函数
df <- data.frame(a=c(4,4,3,3,3,2,4,4,5,5), 
                 b=c(3,4,1,4,5,2,1,5,1,2), 
                 c=c(5,3,2,1,2,4,5,3,3,3), 
                 d=c(5,4,1,5,4,3,1,2,5,4), 
                 grp=c(4,2,2,1,1,4,4,1,4,4))
df %>% group_by(grp) %>% summarise_each(funs(sum)) #only to see sums for grp variable!
number <-c(1,2,3,4)

我使用group_by函数查看df数据框中每列的总和。我想将grp列中的值与number向量中的值进行比较,并创建新的数据框:

  1. number值为1的行中的值等于行grp 1中的值,按&#39; grp&#39;
  2. 分组
  3. number值为2的行中的值等于行grp 1和grp 2中的值的总和,按&#39; grp&#39;
  4. 分组
  5. number值为3的行中的值等于行grp 1和grp 2中的值的总和(因为没有grp 3)按& #39; GRP&#39;
  6. number值为4的行中的值等于行grp 1,grp 2和grp 4中的值的总和,按&#39; grp&#分组39;
  7. 最终结果:

    new <- data.frame(grp=number,
                     a=c(10,17,17,37), 
                     b=c(14,19,19,28), 
                     c=c(6,11,11,31), 
                     d=c(11,16,16,34) 
                     )
    
    new
    #  grp  a  b  c  d
    #1   1 10 14  6 11
    #2   2 17 19 11 16
    #3   3 17 19 11 16
    #4   4 37 28 31 34
    

1 个答案:

答案 0 :(得分:2)

cumsum外,所有其他列似乎都需要grp;要填写缺失的grp,您可以将{em> tidyr :: complete 与number一起使用:

library(dplyr); library(tidyr)

df %>% 
    group_by(grp) %>% 
    summarise_all(sum) %>% 
    complete(grp = number) %>% 
    mutate_at(vars(-one_of('grp')), ~ cumsum(coalesce(., 0)))

# A tibble: 4 x 5
#    grp     a     b     c     d
#  <dbl> <dbl> <dbl> <dbl> <dbl>
#1     1    10    14     6    11
#2     2    17    19    11    16
#3     3    17    19    11    16
#4     4    37    28    31    34