Длинные и широкие данные – когда использовать? [закрытый]

Я в процессе компиляции данных из разных наборов данных в один набор данных для анализа. Я буду исследовать данные, пробовать разные вещи, чтобы выяснить, какие закономерности могут быть скрыты в данных, поэтому в настоящее время у меня нет конкретного метода. Теперь мне интересно, должен ли я компилировать свои данные в длинный или широкий формат.

какой формат я должен использовать, и почему?

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

Я не спрашиваю о производительности. Это было отражено в других вопросах.

3 ответов


Хэдли Уикхэм Опрятный Данных бумага, и tidyr пакет, который является его (последней) реализацией своих принципов, является отличным местом для начала.

грубый ответ на вопрос заключается в том, что данные во время обработки всегда должны быть длинными и должны быть расширены только для целей отображения. Будьте осторожны с этим, хотя, поскольку здесь "длинный "относится больше к" аккуратному", а не к чистой длинной форме.

примеры

взять например,mtcars dataset. Это уже в аккуратной форме, в том, что каждая строка представляет собой одно наблюдение. Так что "удлиняя" его, получить что-то вроде этого

        model type   value
1 AMC Javelin  mpg  15.200
2 AMC Javelin  cyl   8.000
3 AMC Javelin disp 304.000
4 AMC Javelin   hp 150.000
5 AMC Javelin drat   3.150
6 AMC Javelin   wt   3.435

контрпродуктивно; mpg и cyl не сопоставимы каким-либо значимым образом.

взяв ChickWeight dataset (который находится в длинной форме) и преобразует его в широкий по времени

require(tidyr)
ChickWeight %>% spread(Time, weight)
   Chick Diet  0  2  4  6   8  10  12  14  16  18  20  21
1     18    1 39 35 NA NA  NA  NA  NA  NA  NA  NA  NA  NA
2     16    1 41 45 49 51  57  51  54  NA  NA  NA  NA  NA
3     15    1 41 49 56 64  68  68  67  68  NA  NA  NA  NA
4     13    1 41 48 53 60  65  67  71  70  71  81  91  96
5      9    1 42 51 59 68  85  96  90  92  93 100 100  98
6     20    1 41 47 54 58  65  73  77  89  98 107 115 117
7     10    1 41 44 52 63  74  81  89  96 101 112 120 124
8      8    1 42 50 61 71  84  93 110 116 126 134 125  NA
9     17    1 42 51 61 72  83  89  98 103 113 123 133 142
10    19    1 43 48 55 62  65  71  82  88 106 120 144 157
11     4    1 42 49 56 67  74  87 102 108 136 154 160 157
12     6    1 41 49 59 74  97 124 141 148 155 160 160 157
13    11    1 43 51 63 84 112 139 168 177 182 184 181 175
...

дает визуализацию, которая может быть полезной, но для целей анализа данных, очень неудобно, так как вычислительные вещи, такие как темпы роста, становятся громоздкими.


Как упоминал Роланд, большинство функций R нуждаются в нем в длинном формате, и часто легче обрабатывать данные таким образом.

но с другой стороны, людям легче просматривать и понимать широкий формат, особенно когда он вводится и проверяется, где человеческое понимание важно для обеспечения качества и точности.

Итак, я вижу, что данные имеют тенденцию начинать жизнь в широком формате, а затем становиться длинными, поскольку они больше используются для обработки. К счастью преобразование назад и вперед в настоящее время довольно легко, особенно с .


ответ имхо довольно прямо вперед. По умолчанию длинный формат занимает значительно больше места, так как новый столбец "переменная" также должен быть представлен. Однако, long Data format может значительно сжимать ваши данные. Если у вас очень разреженная матрица-это если много столбцов NA - вы можете указать na.rm=true.

Furthermore, оно позволяет более эффективным вычислениям в много случаев. Но то, что вы определили вне сферы действия.