我正在将来自不同数据集的数据编译成一个数据集进行分析。我将进行数据探索,尝试不同的事情来找出数据中可能隐藏的规则,因此我目前没有特定的方法。现在我想知道我是否应该将我的数据编译成长格式或宽格式。
我应该使用哪种格式?为什么?
我知道数据可以从长到宽重新形成,反之亦然,但仅仅存在这种功能意味着有时需要重新塑造这种需求反过来意味着特定的格式可能更适合某种特定格式。任务。那么我什么时候需要哪种格式?为什么?
我不是在询问表现。其他问题已经涵盖了这一点。
答案 0 :(得分:6)
Hadley Wickham的Tidy Data论文以及tidyr
一揽子计划是他(最新)实施的原则,是一个很好的起点。
问题的粗略答案是,在处理过程中,数据应始终很长,并且只应加宽以用于显示目的。但要谨慎,因为这里" long"更多地指的是" tidy"而不是纯粹的长形式。
<强>实施例强>
以mtcars
数据集为例。这已经是整齐的形式,因为每行代表一个观察。所以&#34;延长&#34;它,得到这样的东西
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
数据集(长格式)并将其转换为广泛的
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
...
提供可能有用的可视化,但是出于数据分析的目的,非常不方便,因为增长率等计算变得很麻烦。
答案 1 :(得分:3)
答案非常直截了当。默认情况下,长格式会占用更多空间作为新的&#34;变量&#34;列也需要表示。然而, 长数据格式可以显着压缩您的数据。如果你有一个非常稀疏的矩阵 - 如果很多列都是NA - 你可以指定na.rm = true。
此外,它允许在许多情况下更有效的计算。但是那个你定义的范围超出范围。
答案 2 :(得分:3)
正如Roland所说,大多数R函数需要长格式,并且通常更容易处理数据。
但另一方面,人们更容易查看和理解宽格式,特别是在输入和验证时,人类理解对于确保质量和准确性非常重要。
所以我看到数据倾向于以宽格式开始生活,然后变得越来越长,因为它被更多地用于处理。幸运的是,现在来回转换非常简单,尤其是使用tidyr
包。