按频率分组的数据分组

时间:2012-08-14 14:10:42

标签: r

我对R很新,我正在寻找一种按频率汇总数据的方法。所以,我有一个这样的数据框:

immagine    media
1          1 60.65391
2          2 58.89603
3          3 60.45428
4          4 55.91487
5          5 56.11804
6          6 56.05239
7          7 61.12667
8          8 60.46287
9          9 57.96718
10        10 58.75914
11        11 60.39214
12        12 57.64966
13        13 57.14457
14        14 56.85810
15        15 56.97652
16        16 58.45831
17        17 57.37774
18        18 57.31794
19        19 60.89813
20        20 61.57055
21        21 59.62459
22        22 56.86678
23        23 56.46254
24        24 54.72302
25        25 56.04285
26        26 55.88004
27        27 56.64764

我希望有一个表格,将变量“media”分成55-60,50-55等组......而且这是相对不可思议的。我真的不知道该怎么做。 提前感谢任何人。

我还希望将数据除以置信区间。是否可以使用切割功能,以便让不同的群体在95%CI下潜? 。提前致谢。尼古拉

尼古拉

1 个答案:

答案 0 :(得分:5)

cut为您提供了一个因素,其中级别是您指定的分组。

table采用向量并告诉您每个级别中有多少元素。

结合这两者,你应该能够做你想做的事情:

> media <- rnorm(10,2.5)+57
> media
 [1] 60.13145 58.78920 61.01821 60.35878 59.20806 57.75657 61.12825 59.67605
 [9] 59.29902 58.70735
> ct <- cut( media, seq(50,65,2.5), include.lowest=TRUE ) 
> ct
 [1] (60,62.5] (57.5,60] (60,62.5] (60,62.5] (57.5,60] (57.5,60] (60,62.5]
 [8] (57.5,60] (57.5,60] (57.5,60]
Levels: [50,52.5] (52.5,55] (55,57.5] (57.5,60] (60,62.5] (62.5,65]
> table(ct)
ct
[50,52.5] (52.5,55] (55,57.5] (57.5,60] (60,62.5] (62.5,65] 
        0         0         0         6         4         0 

因为表返回一个向量,所以如果需要,可以输出百分比:

> table(ct)/length(ct)*100
ct
[50,52.5] (52.5,55] (55,57.5] (57.5,60] (60,62.5] (62.5,65] 
        0         0         0        60        40         0

由于保留了向量的排序,您可以通过将ct存储为新列来将分组添加回data.frame。如果您的data.frame被称为dat,那么:

dat$group <- ct

应该这样做。