如何将数据框数据放入箱中

时间:2014-05-02 16:32:51

标签: r

我有这些数据:

12.1 12.5 12.6 12.7 12.8 13.0 13.2 13.2 13.2 13.3 13.3 13.3 
13.4 13.4 13.5 13.5 13.7 13.7 13.7 13.8 13.9 14.1 14.1 14.2 
14.3 14.3 14.3 14.4 14.4 14.5 14.6 14.6 14.6 14.8 14.8 14.9 
14.9 14.9 15.2 15.2 15.3 15.3 15.5 15.6 15.6 15.7 15.8 15.9 
16.1 16.1 16.3 16.4 16.4 16.5 16.7 16.9 17.0

我想把它放进这些箱子里:

12.1 12.5 12.6 12.7 12.8 13.0 13.2 13.3 13.4 13.5 13.7 13.8 
13.9 14.1 14.2 14.3 14.4 14.5 14.6 14.8 14.9 15.2 15.3 15.5 
15.6 15.7 15.8 15.9 16.1 16.3 16.4 16.5 16.7 16.9 17.0

例如,13.2和13.3箱会有3个项目等等。

我应该提一下,数据集中还有其他列,我希望将这些数字数据放入垃圾箱。

我是R的新手并试图找出分档。

以下是设置数据的代码和唯一值:

test <- function() {
    data <- c(12.1,12.5,12.6,12.7,12.8,13.0,13.2,13.2,13.2,13.3,13.3,13.3,
13.4,13.4,13.5,13.5,13.7,13.7,13.7,13.8,13.9,14.1,14.1,14.2,
14.3,14.3,14.3,14.4,14.4,14.5,14.6,14.6,14.6,14.8,14.8,14.9,
14.9,14.9,15.2,15.2,15.3,15.3,15.5,15.6,15.6,15.7,15.8,15.9,
16.1,16.1,16.3,16.4,16.4,16.5,16.7,16.9,17.0)

    unique_data = unique(data)

    print(unique_data)
}

2 个答案:

答案 0 :(得分:1)

假设&#34; x&#34;是你的输入向量和&#34; y&#34;是你的断点向量,你应该使用cut

cut(x, c(-Inf, y, Inf))

以下是bin计数的示例:

table(cut(x, c(-Inf, y, Inf)))
# 
# (-Inf,12.1] (12.1,12.5] (12.5,12.6] (12.6,12.7] (12.7,12.8]   (12.8,13] 
#           1           1           1           1           1           1 
#   (13,13.2] (13.2,13.3] (13.3,13.4] (13.4,13.5] (13.5,13.7] (13.7,13.8] 
#           3           3           2           2           3           1 
# (13.8,13.9] (13.9,14.1] (14.1,14.2] (14.2,14.3] (14.3,14.4] (14.4,14.5] 
#           1           2           1           3           2           1 
# (14.5,14.6] (14.6,14.8] (14.8,14.9] (14.9,15.2] (15.2,15.3] (15.3,15.5] 
#           3           2           3           2           2           1 
# (15.5,15.6] (15.6,15.7] (15.7,15.8] (15.8,15.9] (15.9,16.1] (16.1,16.3] 
#           2           1           1           1           2           1 
# (16.3,16.4] (16.4,16.5] (16.5,16.7] (16.7,16.9]   (16.9,17]   (17, Inf] 
#           2           1           1           1           1           0

您可能需要调整一些参数以使值落在您期望它们的容器中,但cut通常是此函数,以及findInterval作为近亲

答案 1 :(得分:0)

dplyr package包含一些用于执行此类操作的便捷工具。

假设您有一个数据框df,其中您提到的值位于value列中,您可以使用以下语法对唯一值进行分箱和计数:

binned = df %.% group_by(value) %.% summarise(count=n())

binned将包含valuecount列。

summarise可让您添加其他摘要统计信息。如果您想添加某些列other_value的平均值,您可以这样做:

binned = df %.% group_by(value) %.% summarise(count=n(), mean_other_val=mean(other_val))

现在,binned将包含valuecountmean_other_val列。