R排名方法

时间:2017-04-25 10:33:07

标签: r

我有以下代码

> x <- c("A", "B", "A", "C", "B", "A", "D")
> df <- data.frame(x)
> df
  x
1 A
2 B
3 A
4 C
5 B
6 A
7 D
> 

我最终想要用另一列标记数据框行,以便x的每个实例都标记为它的排名如此

1 A 1
2 B 1
3 A 2
4 C 1
5 B 2
6 A 3
7 D 1

以下是我的想法,但我不确定这是不是最好的方法

> df$y <- sapply(df$x, function(x){order(which(df$x==x))});
> df
  x       y
1 A 1, 2, 3
2 B    1, 2
3 A 1, 2, 3
4 C       1
5 B    1, 2
6 A 1, 2, 3
7 D       

因此,基本上,我现在有一个数据框,每个&#39; x以及索引是顺序的。

如何在不编写显式循环的情况下从此处继续操作?有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

使用data.table方法:

require(data.table)
x <- c("A", "B", "A", "C", "B", "A", "D")
dt <- data.table(x)
dt[,RANK := seq_len(.N), by = x]