2017-05-26 1 views
4

Gibt es eine Bibliothek oder Funktion für r-markdown, um die Struktur eines Datenrahmens als Tabelle anzuzeigen? Etwas ähnliches wie die Ausgabe von str(myDataFrame), aber als eine ziemlich formatierte R-Abschriften-Tabelle?show str (...) als Tabelle in R Markdown

Zum Beispiel sollte die folgende Ausgabe als mindestens die Spalten angezeigt werden, die die Feature-Namen und die Datentypen enthalten. Einige Beispielwerte wären nett, aber nicht erforderlich.

str(mtcars) 
'data.frame': 32 obs. of 11 variables: 
$ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ... 
$ cyl : num 6 6 4 6 8 6 8 4 4 6 ... 
$ disp: num 160 160 108 258 360 ... 
$ hp : num 110 110 93 110 175 105 245 62 95 123 ... 
$ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ... 
$ wt : num 2.62 2.88 2.32 3.21 3.44 ... 
$ qsec: num 16.5 17 18.6 19.4 17 ... 
$ vs : num 0 0 1 1 0 1 0 1 1 1 ... 
$ am : num 1 1 1 0 0 0 0 0 0 0 ... 
$ gear: num 4 4 4 3 3 3 3 4 4 4 ... 
$ carb: num 4 4 1 1 2 1 4 2 2 4 ... 

Antwort

7

str verwendet cat, also gibt es keine möglichkeit, es in ein hübsches data.frame zu verwandeln. Aber Sie können seine Funktionalitäten nachahmen, um eine zu erstellen und sie dann an Ihren bevorzugten Formatierungstabellenformatierer (kable, pander, etc.) zu übergeben:

library(knitr) 
library(magrittr) 
data.frame(variable = names(mtcars), 
      classe = sapply(mtcars, typeof), 
      first_values = sapply(mtcars, function(x) paste0(head(x), collapse = ", ")), 
      row.names = NULL) %>% 
    kable() 

|variable |classe |first_values        | 
|:--------|:-------|:----------------------------------------| 
|mpg  |numeric |21, 21, 22.8, 21.4, 18.7, 18.1   | 
|cyl  |numeric |6, 6, 4, 6, 8, 6       | 
|disp  |numeric |160, 160, 108, 258, 360, 225    | 
|hp  |numeric |110, 110, 93, 110, 175, 105    | 
|drat  |numeric |3.9, 3.9, 3.85, 3.08, 3.15, 2.76   | 
|wt  |numeric |2.62, 2.875, 2.32, 3.215, 3.44, 3.46  | 
|qsec  |numeric |16.46, 17.02, 18.61, 19.44, 17.02, 20.22 | 
|vs  |numeric |0, 0, 1, 1, 0, 1       | 
|am  |numeric |1, 1, 1, 0, 0, 0       | 
|gear  |numeric |4, 4, 4, 3, 3, 3       | 
|carb  |numeric |4, 4, 1, 1, 2, 1       | 
+0

Danke. Das ist, was ich gesucht habe. Ich hatte gehofft, dass es bereits eine bequeme Funktion in einer dieser verschiedenen Bibliotheken gibt, aber es scheint nicht so. Es gab eine Sache, die ich ändern musste, um diesen Code auszuführen: Statt der Klassenfunktion musste ich die Funktion typeof verwenden, wie in der Antwort von R. Schifini unten gezeigt. –

+0

Danke für die Aktualisierung –

1

Versuchen Sie folgendes:

m = sapply(mtcars, FUN = function(x) typeof(x)) 

Ergebnis:

> m 
    mpg  cyl  disp  hp  drat  wt  qsec  vs  am  gear  carb 
"double" "double" "double" "double" "double" "double" "double" "double" "double" "double" "double" 

Oder mit lapply:

m = data.frame(lapply(mtcars,FUN = function(x) typeof(x))) 

Ergebnis:

> m 
    mpg cyl disp  hp drat  wt qsec  vs  am gear carb 
1 double double double double double double double double double double double 
+0

Danke. Dies funktioniert perfekt für mich in Kombination mit der obigen Antwort. –