1

我的目标是在数据透视表中比较一家特定商店的存在与我们可以找到这些商店的人口密度之间是否存在联系。为此,我有一个 CSV 文件,其中包含 600 个有或没有商店的区域示例。这是一个包含 600 行和两列的文件:1/ 代表一个区域的人口密度的数字,以及 2/ 该区域中该特定商店的数量(0、1 或 2)。

为了做一个数据透视表,我需要将密度分组为 10 组,每组 60 行(在第一组中,60 个较大的密度,直到最后一组,60 个较小的密度)。然后,我就可以很容易地看到建了多少商店,密度是低还是高。我可以理解吗(我希望)?:)

我想没什么难的。但是有很多方法(和包装)可以解决这个问题......我有点迷失了。

我的主要问题:将我的变量分成十组每组 60 行的最简单方法是什么?我试过 cut()/ cut2()和 hist() 都没有成功,我听说过 bin_var() 和 reshape() 但我不明白它们对这种情况有何帮助。


例如(正如贾斯汀所问)。使用剪切():

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 行?我准确地说数据框从最低到最高正确排列。

我当然想念什么……但是什么?

4

2 回答 2

3

cut2我认为一旦你有一个数字变量可以使用,你会很高兴的。使用逗号作为小数分隔符时,在读取数据集时使用read.csv2或使用参数。dec = ","

y = runif(600, 14.9, 10396.8)

require(Hmisc)
summary(cut2(y, m = 60))

你可以用 做同样的事情cut,但你需要在适当的分位数处设置你的休息时间以获得相等的组,这需要更多的工作。

summary(cut(y, breaks = quantile(y, probs = seq(0, 1, 1/10)), include.lowest = TRUE))
于 2013-09-11T15:54:11.150 回答
1

响应您的数据:您需要更正数据输入中的错误:

data$densit_pop3 <- as.numeric( 
                       sub('\\,', '.',  
                       as.character(data$densit_pop2)))

然后。这些方面的东西(假设这不是关于从文本文件加载数据的真正问题):

with(dfrm, by(dens, factor(shops), summary) )

作为 hte 输出的示例,您可能会得到:

with(BNP, by( proBNP.A, Sex, summary))

Sex: Female
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
    5.0    55.7   103.6   167.9   193.6  5488.0 3094899 
--------------------------------------------------------------------- 
Sex: Male
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
      5      30      63     133     129    5651 4013760 

如果您尝试绘制此图以查看密度的密度(在这种情况下,这似乎是一个合理的要求),请尝试以下操作:

require(lattice)
densityplot( ~dens|shops, data=dfrm)

(请不要再称这些“数据透视表”。这是 Excel 的一种聚合策略,应该真正学会用标准统计或数学术语来描述所需的输出。)

于 2013-09-11T02:31:19.013 回答