【发布时间】:2013-09-10 22:38:18
【问题描述】:
我的目标是在数据透视表中比较某个特定商店的存在与我们可以找到这些商店的人口密度之间是否存在联系。为此,我有一个 CSV 文件,其中包含 600 个有或没有商店的区域示例。这是一个包含 600 行和两列的文件:1/ 代表一个区域的人口密度的数字,以及 2/ 该区域中该特定商店的数量(0、1 或 2)。
为了制作数据透视表,我需要将密度分组为 10 组,每组 60 行(第一组中 60 个较大的密度,直到最后一组 60 个较小的密度)。然后,我就可以很容易地看到建了多少商店,密度是低还是高。我可以理解吗(我希望)? :)
我想没什么难的。但是有很多方法(和包)可以解决这个问题......我有点迷路了。
我的主要问题:将我的变量分成十组每组 60 行的最简单方法是什么?我试过 cut()/cut2() 和 hist() 没有成功,我听说过 bin_var() 和 reshape() 但我不明白它们对这种情况有何帮助。
例如(正如贾斯汀所问的)。 用 cut():
data <- read.csv("data.csv", sep = ";")
groups <- cut(as.numeric(data$densit_pop2), breaks=10)
summary(groups)
(0.492,51.4] (51.4,102] (102,153] (153,204] (204,255] (255,306]
53 53 52 52 52 54
(306,357] (357,408] (408,459] (459,510]
52 59 53 54
好的,确实,“组”包含 10 个组,行数几乎相同。但是间隔中指示的某些值对我没有任何意义。这是密度列的第一行(递增排序):
> head(data$densit_pop2)
[1] 14,9 16,7 17,3 18,3 20,2 20,5
509 Levels: 100 1013,2 102,4 102,6 10328 103,6 10375 10396,8 104,2 ... 99,9
我的意思是,看看第一组。为什么 0.492 当 14.9 是我的最小值时?而且,如果我手动计算第一个和值 51.4 之间有多少行,我会找到 76。为什么它显示为 53 行?我准确地说数据框从最低到最高正确排列。
我当然想念什么……但是什么?
【问题讨论】:
-
你能分享一些你尝试过的东西吗,就像在实际代码中一样?
cut和hist怎么工作?您真的想要每个组中的偶数或整个范围内的均匀分布吗? -
您可以使用percentile
-
@justin 很好的问题!我真的每组都需要偶数。正是我没有用“cut”和“hist”来制作......
-
@Metrics 抱歉,我不熟悉这个概念。你能发展吗? :)
-
我认为至少部分问题在于您没有告诉 R 您使用逗号作为小数点。使用
read.csv2会有所帮助。因为您没有将小数点设置为逗号,所以您正试图将因子直接转换为cut中的数值变量。这就是为什么cut的输出没有覆盖你的变量范围。