我在一个框架中有这个专栏,df:
10
12
75
89
25
100
67
89
4
67
120.2
140.5
170.5
78.1
字符串
我正试图
1.计算df范围的10%,20%,30%,.,90%百分位值。
1.根据值的百分位数分配1-10的值。(例如,如果10在df的20%-30%百分位数范围内,我分配一个存储在不同列中的值2。
基本上,我试图创建这样的输出(这些值是粗略的估计,而不是基于实际的数据)
10 2
12 2
75 4
89 5
25 3
100 6
67 4
89 6
4 1
67 5
120.2 7
140.5 8
170.5 10
78.1 5
型
我不知道如何创建这些字符串并赋值。
到目前为止我只能做到这一点
quantile(df, c(.1, .2,.3,.4,.5,.6,.7,.8,.9))
型
你能帮帮忙吗?
谢谢
4条答案
按热度按时间l7mqbcuq1#
这是一种选择:
字符串
o3imoua42#
假设你的值是以
x
为单位的,我会这样做,字符串
分数
(x-min(x)) / (max(x)-min(x))
表示我们在这个范围内有多远。分母(max(x)-min(x))
得到范围,在这个例子中是170.5 - 4 = 166.5
。分子x-min(x)
计算我们在这个范围内有多远。然后乘以
10
并向下舍入,得到一个介于0
和10
之间的数字。型
这给出了与你在例子中给出的不同的结果,但是最小的数字是
4
,那么例如10
显然福尔斯0
到10%
的类别,而不是20
到30%
的类别。编辑:如果你对值的 * 顺序 * 感兴趣,你可以这样做
型
rank
给出型
然后除以长度(
14
),与上面类似,乘以10
,并使用floor
型
pod7payv3#
不太清楚您是如何根据示例计算中断的,但从您的描述来看,这应该可以工作
字符串
在这里,我们取向量并将其分为10组,其中
seq(min(x),max(x), length.out=11)
(从而使用观察值的范围),因此这些组为型
然后,我们只需使用
cut
命令和这些中断来创建新的ID,型
如果你真的想使用分位数,你可以使用
型
这将给给予
型
6yoyoihd4#
或者你可以使用
data.table
的方式,这要快得多:字符串