我正在将来自不同数据集的数据编译成一个数据集进行分析.我将进行数据探索,尝试不同的事情来找出数据中可能隐藏的规则,因此我目前没有特定的方法.现在我想知道我是否应该将数据编译成长格式或宽格式.
我应该使用哪种格式,为什么?
我理解数据可以从长到宽重新形成,反之亦然,但仅仅存在这种功能意味着有时需要重新塑造,这反过来意味着特定的格式可能更适合于某个任务.那么我什么时候需要哪种格式?为什么?
我不是在问性能问题.其他问题已经涉及到这一点.
Hadley Wickham的Tidy数据论文,以及tidyr
他(最新)实现其原则的软件包,是一个很好的起点.
这个问题的粗略答案是,在处理过程中,数据应该总是很长,并且只能为了显示目的而加宽.但要谨慎,因为这里"长"更多的是指"整洁",而不是纯粹的长形式.
例子
以mtcars
数据集为例.这已经是整齐的形式,因为每行代表一个观察.所以"延长"它,得到这样的东西
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 ...
提供可能有用的可视化,但是出于数据分析的目的,非常不方便,因为计算诸如增长率之类的事情变得麻烦.