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等
我在这里使用的完整示例无法复制。我正在使用等级函数,然后将其与另一列组合以创建等级和总计(转换为字符)。看到此输出图像
您将看到它按1、10、11 ... 2、20、21等排序,而不是1,2,3,4 ...这就是为什么我希望包括前导零,因为当我合并列时,它不再是数字向量
答案 0 :(得分:0)
您要执行的操作是用0开头填充字符串。进行填充非常重要,而不是仅在paste
或sprintf
上加上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))