Когда я пытаюсь суммировать по группам с помощью dplyr, почему dplyr игнорирует мою группу? - PullRequest
1 голос
/ 07 мая 2020

Я хочу создать новый столбец в фрейме данных, который суммирует по каждой группе. Фрейм данных:

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

Теперь я хочу взять сумму a на 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

Что пошло не так?

Ответы [ 2 ]

2 голосов
/ 07 мая 2020

Вы на самом деле сделали это сложнее, чем нужно. Нет необходимости в as.numeri c при создании a и нет необходимости в cbind при создании ab

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

Создано 07.05.2020 пакет REPEX (v0.3.0)

2 голосов
/ 07 мая 2020

Сначала вам нужно изменить ab$a на numeri c. Попробуйте это:

library(tidyverse)

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