我在数据框中有这个列,df:
10
12
75
89
25
100
67
89
4
67
120.2
140.5
170.5
78.1
我正在尝试
基本上,我正在尝试创建这样的输出(这些值是粗略估计,而不是基于实际百分位数)
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))
你可以帮忙吗?
由于
答案 0 :(得分:2)
这是一个选择:
d <- read.table(text="10
12
75
89
25
100
67
89
4
67
120.2
140.5
170.5
78.1")
transform(d, percentile=findInterval(V1, quantile(V1, seq(0,1, by=.1))))
# HEAD:
#
# V1 percentile
# 1 10 1
# 2 12 2
# 3 75 5
# 4 89 7
# 5 25 3
#
# --- 4 rows omitted ---
#
# TAIL:
# V1 percentile
# 10 67.0 4
# 11 120.2 9
# 12 140.5 10
# 13 170.5 11
# 14 78.1 6
答案 1 :(得分:1)
假设您的值在x
,我会做类似
floor((x-min(x)) / (max(x)-min(x)) *10)
分数(x-min(x)) / (max(x)-min(x))
表示我们的范围有多远。分母(max(x)-min(x))
得到范围,在本例中为170.5 - 4 = 166.5
。分子x-min(x)
计算我们的范围。
然后我们乘以10
并向下舍入,以获得0
和10
之间的数字。
> floor((x-min(x)) / (max(x)-min(x))*10)
[1] 0 0 4 5 1 5 3 5 0 3 6 8 10 4
这会给您在示例中提供的内容产生不同的结果,但最低编号为4
,例如10
明显属于0
到10%
类别不是20
到30%
类别。
修改:如果您对这些值的订单感兴趣,可以
floor(rank(x) / length(x) * 10)
rank
给出了
2.0 3.0 7.0 9.5 4.0 11.0 5.5 9.5 1.0 5.5 12.0 13.0 14.0 8.0
然后除以长度(14
),类似于上面的乘以10
并使用floor
> floor(rank(x) / length(x) * 10)
[1] 1 2 5 6 2 7 3 6 0 3 8 9 10 5
答案 2 :(得分:0)
根据您的示例,您在计算休息时间方面有点不清楚,但根据您的描述,这应该有效
x<-c(10, 12, 75, 89, 25, 100, 67, 89, 4, 67, 120.2, 140.5, 170.5, 78.1)
qq<-cut(x, breaks=seq(min(x),max(x), length.out=11), include.lowest=T, labels=F)
在这里,我们采用向量并将其分为10组seq(min(x),max(x), length.out=11)
(从而使用观察值的范围),因此这些组是
1: 4-26.65
2: 20.65-37.30
3: 37.30-53.95
....
10: 170.50-153.85
然后我们只使用cut
命令和这些中断来创建新的ID来获取
# cbind(x, qq)
x qq
[1,] 10.0 1
[2,] 12.0 1
[3,] 75.0 5
[4,] 89.0 6
[5,] 25.0 2
[6,] 100.0 6
[7,] 67.0 4
[8,] 89.0 6
[9,] 4.0 1
[10,] 67.0 4
[11,] 120.2 7
[12,] 140.5 9
[13,] 170.5 10
[14,] 78.1 5
如果你真的想使用分位数,你可以使用
qq<-cut(x, breaks=quantile(x, seq(0,1, length.out=11)), include.lowest=T, labels=F)
会给出
x qq
[1,] 10.0 1
[2,] 12.0 2
[3,] 75.0 5
[4,] 89.0 7
[5,] 25.0 3
[6,] 100.0 8
[7,] 67.0 4
[8,] 89.0 7
[9,] 4.0 1
[10,] 67.0 4
[11,] 120.2 9
[12,] 140.5 10
[13,] 170.5 10
[14,] 78.1 6