我有这些数据:
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)
}
答案 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
将包含value
和count
列。
summarise
可让您添加其他摘要统计信息。如果您想添加某些列other_value
的平均值,您可以这样做:
binned = df %.% group_by(value) %.% summarise(count=n(), mean_other_val=mean(other_val))
现在,binned
将包含value
,count
和mean_other_val
列。