直接指定因子水平和大小

时间:2013-08-04 23:13:16

标签: r r-factor

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

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计算临时数据集的方式特别感兴趣。

总而言之,这些解决方案可行,但如果可能的话,我希望采用一些优化的方法。

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

1 个答案:

答案 0 :(得分: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