0
votes

Comment puis-je centrer au groupe individuel signifie avec group_by à dplyr?

> library(dplyr)
> mtcars %>%
+   add_rownames()%>% #if the rownames are needed as a column
+   group_by(cyl) %>% 
+   mutate(cent= mpg-mean(mpg))%>%
+   dplyr ::select(cent)
Adding missing grouping variables: `cyl`
# A tibble: 32 x 2
# Groups:   cyl [3]
     cyl   cent
   <dbl>  <dbl>
 1     6  0.909
 2     6  0.909
 3     4  2.71 
 4     6  1.31 
 5     8 -1.39 
 6     6 -1.99 
 7     8 -5.79 
 8     4  4.31 
 9     4  2.71 
10     6 -0.891
# … with 22 more rows
Warning message:
Deprecated, use tibble::rownames_to_column() instead. 
> mtcars$mpg[1:5]-mean(mtcars$mpg)
[1]  0.909375  0.909375  2.709375  1.309375 -1.390625
I intend to center the mpg at group level mean (i.e. the mean values are diferent at different cyl group), but above code centered at global mean. 

0 commentaires

4 Réponses :


1
votes

Votre code fonctionne juste bien (ou au moins cela fait ce que vous pensez qu'il fait:

      cyl  Mean
    <dbl> <dbl>
  1     6  19.7
  2     6  19.7
  3     4  26.7
  4     6  19.7
  5     8  15.1
  6     6  19.7
  7     8  15.1
  8     4  26.7
  9     4  26.7
 10     6  19.7


0 commentaires

0
votes
> mtcars %>%
+   add_rownames()%>% #if the rownames are needed as a column
+   group_by(cyl) %>% 
+   mutate(cent= mpg-mean(mpg),
+          mean= mean(mpg))%>%
+   dplyr ::select(mpg,mean,cent)
Adding missing grouping variables: `cyl`
# A tibble: 32 x 4
# Groups:   cyl [3]
     cyl   mpg  mean   cent
   <dbl> <dbl> <dbl>  <dbl>
 1     6  21    20.1  0.909
 2     6  21    20.1  0.909
 3     4  22.8  20.1  2.71 
 4     6  21.4  20.1  1.31 
 5     8  18.7  20.1 -1.39 
 6     6  18.1  20.1 -1.99 
 7     8  14.3  20.1 -5.79 
 8     4  24.4  20.1  4.31 
 9     4  22.8  20.1  2.71 
10     6  19.2  20.1 -0.891

0 commentaires

0
votes

Il est étrange que quand j'ajoute dplyr :: préfixe, tout va bien; xxx


0 commentaires

0
votes

Qu'en est-il d'utiliser échelle ? xxx

Assurez-vous de spécifier échelle = f ou il sera normalisé comme le fera. Cela donne: xxx


0 commentaires