在R中使用Rank函数时,包括前导零

时间:2019-04-22 22:40:18

标签: r sorting rank zero

testdf = data.frame(name=c("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o"), score = c(11,15,46,32,22,68,89,35,54,12,44,3,1,88,6))
testdf$rank<-rank(testdf$score)

在R中使用等级函数时,它不包括前导零-排名

1 
2
3
...
10
11
12

但这意味着有时在排序时,其排序为:1、10、11、12 ... 2、21、22、23 ... 3、31、32、33。而不是1、2、3, 4。

有没有一种方法可以在排名函数中包含前导零,从而使输出为01、02、03、04等

我在这里使用的完整示例无法复制。我正在使用等级函数,然后将其与另一列组合以创建等级和总计(转换为字符)。看到此输出图像

https://i.imgur.com/giNeFQ6.jpg

您将看到它按1、10、11 ... 2、20、21等排序,而不是1,2,3,4 ...这就是为什么我希望包括前导零,因为当我合并列时,它不再是数字向量

2 个答案:

答案 0 :(得分:0)

您要执行的操作是用0开头填充字符串。进行填充非常重要,而不是仅在pastesprintf上加上0,因为尽管02会出现在10之前,但不会出现在{{1} }。 以下选项适用于任何向量,并且不是010特定的。这个问题(可能是重复问题)显示了许多选项:How to add leading zeros?

这是最简单的方法:

rank

testdf$rank [1] 4 6 11 8 7 13 15 9 12 5 10 2 1 14 3 stringr::str_pad(testdf$rank, width = 3, side = 'left', pad = '0') [1] "004" "006" "011" "008" "007" "013" "015" "009" "012" "005" "010" "002" [13] "001" "014" "003" 参数告诉您这些字符串的长度,width参数将被添加到字符串的pad一侧,直到它们的长度都相同

答案 1 :(得分:0)

尝试一下(将%02d中的2替换为任何等级的位数):

testdf$rank <- sprintf("%02d",rank(testdf$score))
相关问题