如何在R中创建像excel列标题这样的顺序字母列表?我的excel文件中有559列,所以我想创建一个顺序字母的向量,如"A,B,…Z,AA,AB,……AZ,……BA,BB,……“这是为了我可以创建自己的数据字典,所以想要“映射”到excel的列标题。
发布于 2020-05-28 11:03:39
num2let接受数字或数字向量,并将其转换为字母符号。传递序列1:n以获得顺序输出。
我们还提供了逆函数lets2num,它接受代码并返回数字。
这种方法的主要优点是:(1)它也适用于非序列的输入向量,例如num2let( 599 )查找列编号599的字母代码;(2)如果与序列一起使用,则序列不必是一个倍数或26的幂;(3)它可以与其他代码和基一起使用,而不只是26个字母,例如num2let(1:40,头(字母)),(4)对n没有上限限制,例如,num2let(1e10)起作用,(5)提供两个方向,(6)只使用基R。
num2let <- function(n, lets = LETTERS) {
base <- length(lets)
if (length(n) > 1) return(sapply(n, num2let, lets = lets))
stopifnot(n > 0)
out <- ""
repeat {
if (n > base) {
rem <- (n-1) %% base
n <- (n-1) %/% base
out <- paste0(lets[rem+1], out)
} else return( paste0(lets[n], out) )
}
}
let2num <- function(x, lets = LETTERS) {
base <- length(lets)
s <- strsplit(x, "")
sapply(s, function(x) sum((match(x, lets)) * base ^ seq(length(x) - 1, 0)))
}测试
lets <- num2let(1:40)
lets
## [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O"
## [16] "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z" "AA" "AB" "AC" "AD"
## [31] "AE" "AF" "AG" "AH" "AI" "AJ" "AK" "AL" "AM" "AN"
let2num(lets)
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## [26] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
num2let(599)
## [1] "WA"
let2num("WA")
## [1] 599其他
我以前在这里回答过这个问题,Numeric to Alphabetic Lettering Function in R,我的答案和这里的答案不同,所以你也可以看看这些。
https://stackoverflow.com/questions/62062531
复制相似问题