我正在尝试根据数据帧中另一个变量的值顺序将另一列添加到R中的数据帧,对于该变量,许多行具有相同的值。因此,我希望这个新列实质上是上一列的序数版本,所有具有相同列的最低行中的所有行均分配为1,依此类推。有没有简单的方法可以做到这一点?
(此处附带的数据只是前几行,没有重复,但是完整的数据集共有75个唯一值,超过100.000个观察值)
… Value
1 0.6215278
2 0.5801653
3 0.5287239
4 0.5267176
5 0.5295736
6 0.5422419
7 0.5269841
8 0.5302013
9 0.5017794
答案 0 :(得分:2)
frank
的另一个选项
library(data.table)
frank(x, ties.method = 'dense')
x <- c(1, 1, 2, 3, 3, 4)
答案 1 :(得分:1)
您正在寻找rank
函数。听起来好像您希望使用参数ties.method = "min"
,但有关其他选项,请参见帮助页面。这将留下空白,例如,如果2个条目并列第一,则下一个将获得3级...
x = c(1, 1, 2, 3, 3, 4)
rank(x, ties.method = "min")
# [1] 1 1 3 4 4 6
如果您不希望出现间隙,请使用dplyr::dense_rank
。
dplyr::dense_rank(x)
# [1] 1 1 2 3 3 4