如何根据R中的百分比分配数字?
我在数据框中有这个列,df:如何根据R中的百分比分配数字?,r,R,我在数据框中有这个列,df: 10 12 75 89 25 100 67 89 4 67 120.2 140.5 170.5 78.1 我正在努力 计算df范围的10%、20%、30%、90%百分位值 根据值所属的百分位数指定1-10的值。(例如,如果10在df的20%-30%百分位范围内,我将分配一个存储在不同列中的值2 基本上,我试图创建这样的输出(这些值是粗略的估计,而不是基于实际的百分位数) 我不知道如何创建这些百分位数和赋值 到目前为止,我只能做到这一点 quantile(df, c
10
12
75
89
25
100
67
89
4
67
120.2
140.5
170.5
78.1
我正在努力
quantile(df, c(.1, .2,.3,.4,.5,.6,.7,.8,.9))
你能帮忙吗
谢谢根据您的示例,您是如何计算休息时间的,这有点不清楚,但根据您的描述,这应该是可行的
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)
然后我们只需使用带有这些中断的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<-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)
然后我们只需使用带有这些中断的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<-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)
然后我们只需使用带有这些中断的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<-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)
然后我们只需使用带有这些中断的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)
这是一种选择:
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
d这是一个选项:
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
d这是一个选项:
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
d这是一个选项:
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
d假设您的值在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
假设您的值在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
假设您的值在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
假设您的值在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