我有一个连续变量的向量,例如:
x <- c(0.9000000, 1.2666667, 4.0000000, 5.7333333, 19.7333333, 35.7666667, 44.0000000, 4.4333333, 0.4666667, 0.7000000, 0.9333333, 1.0000000, 1.0000000, 1.0000000, 1.2000000, 1.2333333, 1.2666667, 1.4333333, 1.7000000, 4.0666667, 1.9000000, 2.1000000, 0.9333333, 1.2666667, 3.7333333, 0.9333333, 2.7666667, 3.1333333, 3.9333333, 5.0333333, 6.0666667, 8.2333333)
我想把这个向量按宽度(相等的值数)分成三组(低值、中值和高值),这样low
组的值在所有值中排第三。
然后我想把低和中的箱子分组,这样我就有了一个分类向量,它有Not high
个主题,这将是66%的最低值,和高,这将是33%的最高值。
我已经检查过了,我找不到任何预定义的函数来做这个。
5条答案
按热度按时间hof1towb1#
您可以使用
cut
来分割和标记数值向量。实际上,您正在寻找一个断点,该断点等于x
的有序值的2/3,因此您可以执行以下操作:任何高于3.733333的值都是“高”。因此我们可以:
如果我们将其放入
x
的数据框中,可以看到y
正确地标记了最高值:您可以看到,大约2/3的病例“不高”,1/3的病例“高”:
在“不高”组中不能正好有2/3,因为向量的长度是32,不能被3整除。
rdlzhqv92#
您可以使用
quantile()
:qeeaahzv3#
您可以使用
santoku::chop_equally()
:然后,您可以对因子进行重新分组(如果要保留低/中/高版本):
或者,如果您只需要"High "/" Not high"版本,请使用
chop_quantiles()
:你说你想按"宽度(相等数量的值)"进行分组。上面的分组是按相等数量的值进行的,即3个类别中的每一个都是1/3。如果你想按宽度进行分组,即分成相等宽度的间隔,使用
santoku::chop_evenly()
:注意:我是三德软件包的维护者。
wh6knrhe4#
这是我在R文档中找到的,可能有帮助吗?
bin(x,bin)
关于bin:
“......使用“cut::n”将向量切割为n个相等部分,B)使用“cut::a]b[”创建以下bin:[最小值,a],]a,B[,[b,最大值]..”
使用库fixest https://rdrr.io/cran/fixest/虽然我检查了这只适用于整数,对不起。
来源:https://rdrr.io/cran/fixest/man/bin.html
lbsnaicq5#
正如@Ishan_托马尔提到的,您可以使用
fixest
包中的bin
函数。对于数字,语法是
bin(x, "cut::a]b[")
,a
、b
(等)数字或百分位数后跟一个开或关的方括号(请注意,函数bin
比这更通用)。在您的例子中,您希望创建两个组,第一组包含66%的数据,然后您可以写入
"cut::p66]"
(p66表示第66百分位数),这将创建两个组:[p0, p66]
和]p66, p100]
。然后,要给予自定义名称,只需将它们添加到向量中,如下所示: