如何获得数据帧中多列的密集等级?例如,
# I have:
df <- data.frame(x = c(1,1,1,1,2,2,2,3,3,3),
y = c(1,2,3,4,2,2,2,1,2,3))
# I want:
res <- data.frame(x = c(1,1,1,1,2,2,2,3,3,3),
y = c(1,2,3,4,2,2,2,1,2,3),
r = c(1,2,3,4,5,5,5,6,7,8))
res
x y z
1 1 1 1
2 1 2 2
3 1 3 3
4 1 4 4
5 2 2 5
6 2 2 5
7 2 2 5
8 3 1 6
9 3 2 7
10 3 3 8
我的黑客方法适用于以下特定数据集:
df %>%
arrange(x,y) %>%
mutate(r = if_else(y - lag(y,default=0) == 0, 0, 1)) %>%
mutate(r = cumsum(r))
但是必须有一个更通用的解决方案,也许使用
dense_rank()
或row_number()
之类的函数。但是我为此而苦苦挣扎。dplyr
解决方案是理想的。 最佳答案
发布后,我想我找到了解决方案here。就我而言,应该是:
mutate(df, r = dense_rank(interaction(x,y,lex.order=T)))
但是,如果您有更好的解决方案,请分享。
关于r - R中多列的密集排名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52656032/