首页 > 解决方案 > 当我尝试使用 dplyr 按组求和时,为什么 dplyr 会忽略我的组?

问题描述

我想在每个组求和的数据框中创建一个新列。数据框为:

a<-as.numeric(c(1,2,4,2,2))
b<-c('G','A','A','C','F')
ab<-data.frame(cbind(a,b))

这给了我以下数据集:

 ab
  a b
1 1 G
2 2 A
3 4 A
4 2 C
5 2 F

现在我想取aby的总和b

ab<-ab %>% 
group_by(b) %>%
mutate(c=sum(as.numeric(a)))

我的结果是:

a     b     c 
<fct> <fct> <dbl>
1       G    10
2       A    10
4       A    10
2       C    10
2       F    10

如您所见,它完全忽略了我的分组,只是a对整个数据集求和。我想要的是:

   a     b     c    
<fct> <fct> <dbl>
    1     G    1
    2     A    6
    4     A    6
    2     C    2
    2     F    2

什么地方出了错?

标签: rgroup-bydplyrsummarize

解决方案


你实际上让它变得比它需要的更复杂。创建时不需要 as.numeric,创建时也不a需要cbindab

library(dplyr)

a <- c(1, 2, 4, 2, 2) 
b <- c('G', 'A', 'A', 'C', 'F')
ab <- data.frame(a, b)
str(ab)
#> 'data.frame':    5 obs. of  2 variables:
#>  $ a: num  1 2 4 2 2
#>  $ b: chr  "G" "A" "A" "C" ...
ab <- ab %>%
  group_by(b) %>%
  mutate(c = sum(a))
ab
#> # A tibble: 5 x 3
#> # Groups:   b [4]
#>       a b         c
#>   <dbl> <chr> <dbl>
#> 1     1 G         1
#> 2     2 A         6
#> 3     4 A         6
#> 4     2 C         2
#> 5     2 F         2

reprex 包(v0.3.0)于 2020 年 5 月 7 日创建


推荐阅读