Можно ли рассчитать размер каждого столбца фрейма данных в R? - PullRequest
0 голосов
/ 06 декабря 2018

В R можно получить размер объекта для всего объекта:

> object.size(dplyr::starwars)
50632 bytes

Если вы проверите фрейм данных, вы заметите, что не все столбцы схожи по содержанию:

> head(dplyr::starwars)
# A tibble: 6 x 13
  name   height  mass hair_color skin_color eye_color birth_year gender homeworld species films vehicles
  <chr>   <int> <dbl> <chr>      <chr>      <chr>          <dbl> <chr>  <chr>     <chr>   <lis> <list>  
1 Luke …    172   77. blond      fair       blue            19.0 male   Tatooine  Human   <chr… <chr [2…
2 C-3PO     167   75. NA         gold       yellow         112.  NA     Tatooine  Droid   <chr… <chr [0…
3 R2-D2      96   32. NA         white, bl… red             33.0 NA     Naboo     Droid   <chr… <chr [0…
4 Darth…    202  136. none       white      yellow          41.9 male   Tatooine  Human   <chr… <chr [0…
5 Leia …    150   49. brown      light      brown           19.0 female Alderaan  Human   <chr… <chr [1…
6 Owen …    178  120. brown, gr… light      blue            52.0 male   Tatooine  Human   <chr… <chr [0…
# ... with 1 more variable: starships <list>

Очевидно, что height займет меньше места, чем hair_color.Есть ли способ проверить, какие столбцы самые большие?Например, если у вас большой фрейм данных, вы можете посмотреть, есть ли какие-то столбцы, которые занимают непропорциональный объем пространства.

1 Ответ

0 голосов
/ 06 декабря 2018

Просто используйте lapply / sapply для циклического перебора всех столбцов

library(dplyr)

sapply(starwars, object.size)

# name     height       mass hair_color skin_color  eye_color birth_year     gender 
# 5576        392        736       1336       2400       1480        736        936 

# homeworld    species      films   vehicles  starships 
#      3216       2648      17920       5136       6496 

, и если вам интересно узнать, какие из верхних столбцов являются самыми большими, вы можете сделать

sapply(starwars, object.size) %>%
            data.frame() %>%
            add_rownames() %>%
            top_n(5)


#  rowname       .
#  <chr>     <dbl>
#1 name       5576
#2 homeworld  3216
#3 films     17920
#4 vehicles   5136
#5 starships  6496

Или

tail(sort(sapply(starwars, object.size)), 5)

#homeworld  vehicles      name starships     films 
#     3216      5136      5576      6496     17920 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...