我试图通过使用来自Hmisc的cut2来计算矢量的等分数切割。
library(Hmisc)
c <- c(-4.18304,-3.18343,-2.93237,-2.82836,-2.13478,-2.01892,-1.88773,
-1.83124,-1.74953,-1.74858,-0.63265,-0.59626,-0.5681)
cut2(c, g=3, onlycuts=TRUE)
[1] -4.18304 -2.01892 -1.74858 -0.56810
但我期待以下结果(33%,33%,33%):
[1] -4.18304 -2.13478 -1.74858 -0.56810
我还应该使用cut2还是尝试不同的东西?我怎样才能使它工作?谢谢你的建议。
答案 0 :(得分:4)
您正在看到切割点,但是您需要表格计数,并且您希望它们是总计的分数,所以请改为:
> prop.table(table(cut2(c, g=3) ) )
[-4.18,-2.019) [-2.02,-1.749) [-1.75,-0.568]
0.3846154 0.3076923 0.3076923
(显然,当元素数不能被3整除时,你不能指望cut2创建一个精确的分割。)
答案 1 :(得分:2)
原始数据集中似乎有意外的十三个值,而不是十二个。十三个值不能平均分为三个分位数组(如BondedDust所述)。这是原始问题,除了排除一个选定的数据值(-1.74953),使其成为十二个值。这给出了最初预期的结果:
library(Hmisc)
c<-c(-4.18304,-3.18343,-2.93237,-2.82836,-2.13478,-2.01892,-1.88773,-1.83124,-1.74858,-0.63265,-0.59626,-0.5681)
cut2(c, g=3,onlycuts=TRUE)
#[1] -4.18304 -2.13478 -1.74953 -0.5681
为了让Hmisc
package中不熟悉cut2
的人(我今天早上像我一样)更清楚,这里有类似的问题,除非我们会使用整数1到12(分配给向量dozen_values
)。
library(Hmisc)
dozen_values <-1:12
quantile_groups <- cut2(dozen_values,g=3)
levels(quantile_groups)
## [1] "[1, 5)" "[5, 9)" "[9,12]"
cutpoints <- cut2(dozen_values, g=3, onlycuts=TRUE)
cutpoints
## [1] 1 5 9 12
# Show which values belong to which quantile group, using a data frame
quantile_DF <- data.frame(dozen_values, quantile_groups)
names(quantile_DF) <- c("value", "quantile_group")
quantile_DF
## value quantile_group
## 1 1 [1, 5)
## 2 2 [1, 5)
## 3 3 [1, 5)
## 4 4 [1, 5)
## 5 5 [5, 9)
## 6 6 [5, 9)
## 7 7 [5, 9)
## 8 8 [5, 9)
## 9 9 [9,12]
## 10 10 [9,12]
## 11 11 [9,12]
## 12 12 [9,12]
请注意,第一个分位数组包括所有内容,但不包括,5(在这种情况下为1到4)。第二个分位数组包含5到但不包括,9(在这种情况下为5到8)。第三(最后)分位数组包含9到12,其中包括最后一个值12.与其他分位数组不同,第三分位数组包括所示的最后一个值。
无论如何,你可以看到&#34; cutpoints&#34; 1
,5
,9
和12
以最简洁的方式描述了分位数组的起点和终点,但如果没有reading relevant documentation则它是钝的(链接到单页Inside-R网站,而不是近400页的PDF手册)。
如果您不熟悉,请参阅this explanation有关括号与方括号表示法的信息。