web-dev-qa-db-fra.com

Comment arrête-t-on d'utiliser rowwise dans dplyr?

Donc, si l'on souhaite appliquer une opération ligne par ligne dans dplyr, on peut utiliser la fonction rowwise, par exemple: Appliquer une fonction à chaque ligne d'une table en utilisant dplyr?

Existe-t-il une fonction unrowwise que vous pouvez utiliser pour arrêter de faire des opérations ligne par ligne? Actuellement, il semble ajouter un group_by Après que le rowwise supprime les opérations de ligne, par exemple.

data.frame(a=1:4) %>% rowwise() %>% group_by(a)
# ...
# Warning message:
# Grouping rowwise data frame strips rowwise nature 

Est-ce à dire que l'on doit utiliser group_by(1) si vous souhaitez supprimer explicitement rowwise?

33
Alex

Comme indiqué dans les commentaires et l'autre réponse, la bonne façon de procéder consiste à utiliser ungroup().

L'opération rowwise(df) définit une des classes de df sur rowwise_df. Nous pouvons voir les méthodes de cette classe en examinant le code ici , qui donne la méthode ungroup suivante:

#' @export
ungroup.rowwise_df <- function(x) {
  class(x) <- c( "tbl_df", "data.frame")
  x
}

Nous voyons donc que ungroup ne supprime pas strictement une structure groupée, au lieu de cela, il supprime simplement le rowwise_df classe ajoutée à partir de la fonction rowwise.

46
Alex

Vous pouvez utiliser as.data.frame (), comme ci-dessous

> data.frame(a=1:4) %>% rowwise() %>% group_by(a)
# A tibble: 4 x 1
# Groups:   a [4]
      a
* <int>
1     1
2     2
3     3
4     4
Warning message:
Grouping rowwise data frame strips rowwise nature 

> data.frame(a=1:4) %>% rowwise() %>% as.data.frame() %>% group_by(a)
# A tibble: 4 x 1
# Groups:   a [4]
      a
* <int>
1     1
2     2
3     3
4     4
0
Sagar Neel De