我有以下代码
> 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以及索引是顺序的。
如何在不编写显式循环的情况下从此处继续操作?有更好的方法吗?
答案 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]