我有这样的数据:
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
非常感谢!
答案 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