2017-05-26 44 views
4

是否有一個庫或r-markdown函數來顯示數據框的結構爲表?有些東西類似於str(myDataFrame)的輸出,但作爲一個相當格式化的r-降價表?show str(...)as在R表Markdown

例如,以下輸出應至少顯示爲包含功能名稱的colums和數據類型。一些示例值會很好,但不是必需的。

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 ... 

回答

7

str使用cat,所以沒有辦法將它轉換成漂亮的data.frame來打印。但你可以模仿它的功能來創建一個,然後將它傳遞給你最喜歡的rmarkdown表格格式器(kable,pander等):

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

謝謝。這是我正在尋找的。我希望已經有一個方便的功能隱藏在其中一個不同的庫中,但它似乎並不如此。有一件事我不得不改變來運行這個代碼:而不是類函數,我必須使用typeof函數,如下面R. Schifini的答案所示。 –

+0

感謝您的更新 –

1

試試這個:

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

結果:

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

或者與lapply

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

結果:

> 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

謝謝。這與我上面的答案完美結合。 –