2014-05-01 26 views
5

Jest to drobny problem, ale w R po wpisaniu head (data.frame) otrzymujesz kilka pierwszych rekordów ze wszystkich wyświetlanych kolumn. W pakiecie dplyr funkcja głowy została zmieniona tak, aby pokazywała tylko kolumny, które zmieszczą się w oknie konsoli. Często jest to miłe, ale często chcę zobaczyć pierwsze kilka rekordów dla wszystkich kolumn. Czy istnieje sposób, aby powiedzieć head (in dplyr), aby wyświetlić wszystkie kolumny bez konwersji tbl.df/data.frame do data.frame (i wolę head to str()).Funkcja head() w pakiecie R dplyr

Dzięki!

ZR

+0

dplyr ma funkcję głowy? – rawr

+0

Zobacz także: http://stackoverflow.com/questions/23188900/view-entire-dataframe-when-wrapped-in-tbl-df/23189030#23189030 – Henrik

+0

@Henrik, jesteś pewien, że działa również na kolumnach? – Arun

Odpowiedz

6

można teraz używać glimpse() czasownika w dplyr 0,2:

od https://github.com/hadley/dplyr/releases:

"glimpse() pozwala zobaczyć wszystkie kolumny w TBL, wyświetlając tyle danych dla każdej zmiennej, ile można zmieścić w pojedynczej linii: "

+0

glimpse() jest dobre i dostaje odpowiedź (choć bardziej przywykłem do orientacji stylu head() i wolę head() do str()). W odpowiedzi na pytanie o stworzenie mojej własnej funkcji - absolutnie jest to dobre podejście.Ale często uczę R i odkrywam, że moje małe osobiste funkcje znajdą się w notatkach z wykładów, więc wolę używać funkcji z istniejących pakietów, jeśli to możliwe. Dziękuje za wszystko! – ZRoss

2

Jak powiedział Arun, że to z powodu sposobu print.tbl_df. Wystarczy zrobić:

print.data.frame(head(your_dplyr_dataframe)) 
+0

Dzięki za pomoc. Być może powinienem to wyjaśnić. Ale funkcja head() jest przydatna, ponieważ jest to super szybki sposób przeglądania danych. głowa (dane) i gotowe. Ale jeśli będę musiał wpisać print.data.frame (head (dplyr_df)) za każdym razem, gdy pokona cel. Zdecydowanie mogę zrobić head (data.frame (dplyr_df)), ale to za dużo pisania. Pomyślałem, że może Hadley zawarł jakąś głowę (dplyr_df, inclCol = T). Nie sądzę? – ZRoss

2

Po prostu nie definiuj swojej własnej funkcji head. Używam tego. Został dostosowany do data.table. W ten sposób możesz patrzeć na to, co chcesz. Pierwsze 3 wiersze są ustawione domyślnie, aby zaoszczędzić miejsce.

peek <- function(d, x = ncol(d)) 
{ 
    if (is.data.table(d)) d[1:3, 1:x, with = FALSE] 
    else if (is.data.frame(d) | is.matrix(d)) d[1:3, 1:x] 
} ## note the 3 row default (to save space below) 

W zakładach data.table:

> library(data.table) 
> emteecars <- as.data.table(mtcars) 

> peek(emteecars, 5) 
#  mpg cyl disp hp drat 
# 1: 21.0 6 160 110 3.90 
# 2: 21.0 6 160 110 3.90 
# 3: 22.8 4 108 93 3.85 

> peek(emteecars) 
#  mpg cyl disp hp drat wt qsec vs am gear carb 
# 1: 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 
# 2: 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 
# 3: 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 

Teraz na data.frame:

> peek(mtcars) 
#     mpg cyl disp hp drat wt qsec vs am gear carb 
# Mazda RX4   21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 
# Mazda RX4 Wag  21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 
# Datsun 710  22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 

> peek(as.matrix(mtcars), 2) 
#     mpg cyl 
# Mazda RX4   21.0 6 
# Mazda RX4 Wag  21.0 6 
# Datsun 710  22.8 4 
2

Ustaw opcję tibble.width kontrolowania ile kolumn są wyświetlane.

options(tibble.width = Inf) 

Aby uzyskać więcej informacji, zobacz ?print.tbl_df.

Powiązane problemy