Переопределение переменных, не отображаемых в dplyr, для отображения всех столбцов из df

Когда у меня есть столбец в локальном фрейме данных, иногда я получаю сообщение Variables not shown, такое как этот (смехотворный) пример, просто нужно достаточно столбцов.

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)

Я хочу увидеть Year1! Как посмотреть все столбцы, желательно по умолчанию.


person Hugh    schedule 18.03.2014    source источник


Ответы (5)


Есть (теперь) способ переопределить ширину распечатываемых столбцов. Если вы запустите эту команду, все будет хорошо

options(dplyr.width = Inf)

Я написал это здесь.

person Mark Needham    schedule 23.11.2014
comment
Я думаю, что это должно быть options с буквой s. Я не могу редактировать, так как правки должны быть 10 символов. - person rrs; 25.11.2014
comment
Это хороший вариант, но он не так полезен, когда у вас слишком много столбцов. Это случилось со мной в df с примерно 200 столбцами, которые отображались, но порядок между строками и столбцами был потерян. Кроме того, большинство строк в какой-то момент были усечены из-за слишком большого количества символов. Я хотел поделиться командой, чтобы вернуть поведение по умолчанию, а именно: «options (dplyr.width = NULL)» - person Javier Fajardo; 06.06.2017

Вам может понравиться 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
person Romain Francois    schedule 18.03.2014
comment
+1 за обнаружение glimpse. Лично основная причина, по которой мне нравится видеть все столбцы, заключается в том, что это удобный способ проверить, действительно ли столбец, который я добавил (посредством суммирования или изменения), сделал то, что я хотел. Так что glimpse не совсем подходит для этого. - person Hugh; 18.03.2014
comment
Для последней версии dplyr используйте %›% вместо %.% - person wint3rschlaefer; 24.04.2015

dplyr имеет собственные функции печати для dplyr объектов. В этом случае результатом вашей операции является объект tbl_df. Тогда соответствующая функция печати будет dplyr:::print.tbl_df. Это показывает, что trunc_mat — это функция, отвечающая за то, что печатается, а что нет, включая переменные.

К сожалению, dplyr:::print.tbl_df не передает никаких параметров в trunc_mat, а trunc_mat также не поддерживает выбор отображаемых переменных (только количество строк). Обходной путь — привести результат dplyr к data.frame и использовать 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
person Paul Hiemstra    schedule 18.03.2014
comment
Запросы на вытягивание всегда приветствуются :) Но print.tbl_df, вероятно, нужен аргумент all_columns. - person hadley; 19.03.2014

Итак, это немного устарело, но я нашел это, когда искал ответы на ту же проблему. Я придумал это решение, которое соответствует духу трубопровода, но по функциям идентично принятому ответу (обратите внимание, что символ трубы %.% устарел в пользу %>%)

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
person mpettis    schedule 13.08.2014

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

dplyr использует вместо параметра печати по умолчанию dplyr:::print.tbl_df, чтобы убедиться, что ваш экран не перегружен огромными наборами данных. Когда вы, наконец, сократите свой материал до того, что хотите, и больше не хотите спасаться от собственных ошибок, просто наклейте print.default в конце, чтобы выплюнуть все.


Кстати, methods(print) показывает, сколько пакетов нужно написать для собственных print функций (подумайте, например, о igraph или xts --- это новые типы данных, поэтому вам нужно указать им, как они должны отображаться на экране).

HTH следующий гуглер.

person isomorphismes    schedule 01.05.2015