web-dev-qa-db-fra.com

Remplacer "Variables non affichées" dans dplyr, pour afficher toutes les colonnes de df

Lorsque j'ai une colonne dans un bloc de données local, parfois je reçois le message Variables not shown comme cet exemple (ridicule) avait juste besoin de suffisamment de colonnes.

library(dplyr)
library(ggplot2) # for movies

movies %.% 
 group_by(year) %.% 
 summarise(Length = mean(length), Title = max(title), 
  Dramaz = sum(Drama), Actionz = sum(Action), 
  Action = sum(Action), Comedyz = sum(Comedy)) %.% 
 mutate(Year1 = year + 1)

   year    Length                       Title Dramaz Actionz Action Comedyz
1  1898  1.000000 Pack Train at Chilkoot Pass      1       0      0       2
2  1894  1.000000           Sioux Ghost Dance      0       0      0       0
3  1902  3.555556     Voyage dans la lune, Le      1       0      0       2
4  1893  1.000000            Blacksmith Scene      0       0      0       0
5  1912 24.382353            Unseen Enemy, An     22       0      0       4
6  1922 74.192308      Trapped by the Mormons     20       0      0      16
7  1895  1.000000                 Photographe      0       0      0       0
8  1909  9.266667              What Drink Did     14       0      0       7
9  1900  1.437500      Uncle Josh's Nightmare      2       0      0       5
10 1919 53.461538     When the Clouds Roll by     17       2      2      29
..  ...       ...                         ...    ...     ...    ...     ...
Variables not shown: Year1 (dbl)

Je veux voir Year1! Comment puis-je voir toutes les colonnes, de préférence par défaut.

35
Hugh

Il existe (maintenant) un moyen de remplacer la largeur des colonnes imprimées. Si vous exécutez cette commande, tout ira bien

options(dplyr.width = Inf)

Je l'ai écrit ici .

48
Mark Needham

Vous aimerez peut-être glimpse:

> movies %>%
+  group_by(year) %>%
+  summarise(Length = mean(length), Title = max(title),
+   Dramaz = sum(Drama), Actionz = sum(Action),
+   Action = sum(Action), Comedyz = sum(Comedy)) %>%
+  mutate(Year1 = year + 1) %>% glimpse()
Variables:
$ year    (int) 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902,...
$ Length  (dbl) 1.000000, 1.000000, 1.000000, 1.307692, 1.000000, 1.000000,...
$ Title   (chr) "Blacksmith Scene", "Sioux Ghost Dance", "Photographe", "Ve...
$ Dramaz  (int) 0, 0, 0, 1, 0, 1, 2, 2, 5, 1, 2, 3, 4, 5, 1, 8, 14, 14, 14,...
$ Actionz (int) 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 3, 0, 0, 1, 0,...
$ Action  (int) 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 3, 0, 0, 1, 0,...
$ Comedyz (int) 0, 0, 0, 1, 2, 2, 1, 5, 8, 2, 8, 10, 6, 2, 6, 8, 7, 2, 2, 4...
$ Year1   (dbl) 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903,...NULL
28
Romain Francois

dplyr possède ses propres fonctions d'impression pour les objets dplyr. Dans ce cas, l'objet résultant de votre opération est tbl_df. La fonction d'impression correspondante est alors dplyr:::print.tbl_df. Cela révèle que trunc_mat est la fonction responsable de ce qui est imprimé et non, y compris des variables.

Tristement, dplyr:::print.tbl_df ne transmet aucun paramètre à trunc_mat et trunc_mat ne prend pas non plus en charge le choix des variables à afficher (uniquement le nombre de lignes). Une solution de contournement consiste à convertir le résultat de dplyr en data.frame et utilisez head:

res = movies %.% 
 group_by(year) %.% 
 summarise(Length = mean(length), Title = max(title), 
  Dramaz = sum(Drama), Actionz = sum(Action), 
  Action = sum(Action), Comedyz = sum(Comedy)) %.% 
 mutate(Year1 = year + 1)

head(data.frame(res))
  year    Length                       Title Dramaz Actionz Action Comedyz
1 1898  1.000000 Pack Train at Chilkoot Pass      1       0      0       2
2 1894  1.000000           Sioux Ghost Dance      0       0      0       0
3 1902  3.555556     Voyage dans la lune, Le      1       0      0       2
4 1893  1.000000            Blacksmith Scene      0       0      0       0
5 1912 24.382353            Unseen Enemy, An     22       0      0       4
6 1922 74.192308      Trapped by the Mormons     20       0      0      16
  Year1
1  1899
2  1895
3  1903
4  1894
5  1913
6  1923
8
Paul Hiemstra

Donc, c'est un peu vieux, mais je l'ai trouvé en cherchant des réponses au même problème. Je suis venu avec cette solution qui tient à l'esprit de la tuyauterie mais identique en fonction à la réponse acceptée (notez que le symbole du tuyau %.% est déconseillé au profit de %>%)

movies %>% 
    group_by(year) %>% 
    summarise(Length = mean(length), Title = max(title), 
    Dramaz = sum(Drama), Actionz = sum(Action), 
    Action = sum(Action), Comedyz = sum(Comedy)) %>% 
    mutate(Year1 = year + 1) %>%
    as.data.frame %>%
    head
1
mpettis

movies %.% group_by(year) %.% ....... %.% print.default

dplyr utilise, au lieu de l'option d'impression par défaut, dplyr:::print.tbl_df pour s'assurer que votre écran ne soit pas surchargé avec d'énormes ensembles de données. Lorsque vous avez finalement réduit vos affaires à ce que vous voulez et ne voulez plus être sauvé de vos propres erreurs, collez simplement print.default À la fin pour tout cracher.


BTW, methods(print) montre combien de packages ont besoin d'écrire leurs propres fonctions print (pensez, par exemple, igraph ou xts --- ce sont nouveaux types de données, vous devez donc leur dire comment s'afficher à l'écran).

HTH le prochain googleur.

1
isomorphismes