在R中排序一个向量而忽略了NAs

问题描述 投票:0回答:3

如果我有一个矢量a = c(1300,NA,NA,NA,NA,1500,NA,NA,6000,NA,NA,900)

我怎么能这个导致:

b=[2,NA,NA,NA,NA,3,NA,NA,4,NA,NA,5]

旁注:我试图让它们重复,所以它是

a=[1300,1300,1300,1300,1300,1500,1500,1500,6000,6000,6000,900]

但是当我使用排名时,它获得了一些疯狂的半数,任何想法?我最终想知道这一点。

保持数量之后的数量是非常重要的,所以我不能忽略它们

r vector count rank
3个回答
1
投票

dplyr::dense_rank函数的行为符合您的要求:

library(dplyr)
dense_rank(a)
# [1]  2 NA NA NA NA  3 NA NA  4 NA NA  1

它也适用于密集向量:

b = c(1300,1300,1300,1300,1300,1500,1500,1500,6000,6000,6000,900)
dense_rank(b)
# [1] 2 2 2 2 2 3 3 3 4 4 4 1

1
投票
replace(a, !is.na(a), rank(a[!is.na(a)], ties.method = "first"))
# [1]  2 NA NA NA NA  3 NA NA  4 NA NA  1

1
投票

a ^ is.na(a)并乘以rank(a)。我们使用ties="first"来确保我们在每个指数上获得增加的值,而不是平均值。

rank(a, ties="first") * a ^ is.na(a)
# [1]  2 NA NA NA NA  3 NA NA  4 NA NA  1
© www.soinside.com 2019 - 2024. All rights reserved.