创建一个变量,它是:变量的顺序,在分类变量中

时间:2015-11-26 16:19:15

标签: r sorting

我有这样的数据:

Colour Length
Blue     1
Blue     2
Blue     4
Red      6
Red      1
Red      2
Green    4
Green    1
Green    6

我想在每种颜色中创建第三列,它是长度值的顺序。所以看起来应该是这样的:

Colour Length  Order
Blue     1       1
Blue     2       2
Blue     4       3
Red      6       3
Red      1       1
Red      2       2
Green    4       2
Green    1       1
Green    6       3
非常感谢!

2 个答案:

答案 0 :(得分:3)

base R中,您可以ave使用rank功能:

df$Order<-ave(df$Length,df$Colour,FUN=rank)
#  Colour Length Order
#1   Blue      1     1
#2   Blue      2     2
#3   Blue      4     3
#4    Red      6     3
#5    Red      1     1
#6    Red      2     2
#7  Green      4     2
#8  Green      1     1
#9  Green      6     3

答案 1 :(得分:1)

我们可以使用data.table。将'data.frame'转换为'data.table'(setDT(df)),order将'Length'转换为'Color',我们得到行序列并指定(:= )它到一个新的列'Order'。

library(data.table)
setDT(df)[order(Length), Order := seq_len(.N) , by = Colour]
df
#    Colour Length Order
#1:   Blue      1     1
#2:   Blue      2     2
#3:   Blue      4     3
#4:    Red      6     3
#5:    Red      1     1
#6:    Red      2     2
#7:  Green      4     2
#8:  Green      1     1
#9:  Green      6     3