2012-04-27 40 views
0

我有一个数据框,其值范围从0到50.000。我想为这些数据创建5个类别,以便将它绘制在分类直方图中。如何绘制R data.frame列与原始值的分类直方图

我想要做的是创建一个列,告诉我哪个是该值所属的类别,以便绘制它。例如,我决定创建以下类别: [1,3](3,6](6,12)(12,30)(30,50000)

这是可能的吗?有一种更简单的方法?这样做,我一般提前使用GGPLOT2库地块

感谢

+0

使用'cut'来做到这一点。 – Andrie 2012-04-27 13:36:35

+1

[R添加包含另一列的bin值的列的可能的副本](http://stackoverflow.com/questions/5570293/r-adding-column-which-contains-bin-value-of-another-column) – Andrie 2012-04-27 13:37:56

+1

@biojl下面是这个问题的一些以前的答案:[在基于范围的R中创建分类变量](http://stackoverflow.com/questions/2647639/create-categorical-variable-in-r-based-on-range ) – 2012-04-27 13:43:35

回答

1

?cut下面是一个例子:。

set.seed(42) 
dat <- data.frame(Values = sample.int(50000, size = 100)) 
## create factor indicating which categoriesy data are in  
grps <- with(dat, cut(Values, breaks = c(1,3,6,12,30,50000))) 

这给:

> head(grps) 
[1] (30,5e+04] (30,5e+04] (30,5e+04] (30,5e+04] (30,5e+04] (30,5e+04] 
Levels: (1,3] (3,6] (6,12] (12,30] (30,5e+04] 
> table(grps) 
grps 
    (1,3]  (3,6]  (6,12] (12,30] (30,5e+04] 
     0   0   1   0   99 

如果你想在数据帧,试试这个来代替:

dat2 <- within(dat, Groups <- cut(Values, breaks = c(1,3,6,12,30,50000))) 

导致

> head(dat2) 
    Values  Groups 
1 45741 (30,5e+04] 
2 46853 (30,5e+04] 
3 14307 (30,5e+04] 
4 41520 (30,5e+04] 
5 32085 (30,5e+04] 
6 25953 (30,5e+04] 

,如果你想给不同的标签,你可以改变所产生的因子的水平给他们。

+0

太棒了!正是我需要的 – biojl 2012-04-27 14:16:23