-4

您将如何创建一个直接指定级别和相应大小的因子?

e.g. [0, 5) 6
     [5, 7) 20
     [7, 13) 4

编辑:这个问题与分组频率分布有关。有时(例如在教科书中),您无法访问原始数据,但您只是获得了每个类中值出现的计数。稍后,您想计算累积计数/频率,您想知道这样或这样的类有多少计数等等。所以你只需要能够进入班级表,因此我的问题。

第二次编辑:典型的教科书示例(已经是总结,原始数据集不可用):

[20, 30) 221890
[30, 35) 171050
[35, 40) 121400
[40, 45) 101050
[45, 60)  71620
# ... possibly many more but let's stop here. 

然后典型的问题是:[30, 35) 类的计数是多少?45的累计数是多少?绘制相应的直方图,依此类推。

所以@thelatemail 第一条评论提供了一个可行的答案,但我担心由此产生的因素“大小”。这就是为什么我要求其他替代解决方案。@agstudy 的回答也按照相同的思路工作,但需要重新创建(临时的、商定的)全新数据集的额外负担。它本身仍然是一个有趣的答案。我对@agstudy 计算临时数据集的方式特别感兴趣。

总而言之,这些解决方案有效,但如果可能的话,我想要一些优化的方法。

从理论上讲,“因子”将是所需的输出,但“因子”似乎太大而无法存储该汇总表。

4

1 回答 1

3

例如使用cut你可以这样做:

cut(rep(c(1,6,11),c(6,20,4)),c(0,5,7,13))

您可以检查使用table

table(cut(rep(c(1,6,11),c(6,20,4)),c(0,5,7,13)))
 (0,5]  (5,7] (7,13] 
     6     20      4 

编辑从间隔创建数据,您也可以这样做:

cut(rep((c(0,5,7,13) +1)[-1],c(6,20,4)),c(0,5,7,13))

编辑即使在澄清之后我仍然不清楚你有什么作为输入,特别是你的输入数据的结构。这里有一个直接的方法:

text='[20, 30) 221890
[30, 35) 171050
[35, 40) 121400
[40, 45) 101050
[45, 60)  71620'

dd <- do.call(rbind,strsplit(readLines(textConnection(text)),') '))

vv <- as.numeric(dd[,2])
names(vv) <- paste0(dd[,1],')')

vv
[20, 30) [30, 35) [35, 40) [40, 45) [45, 60) 
  221890   171050   121400   101050    71620 
于 2013-08-04T23:32:46.193 回答