首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中创建一个顺序字母列表,如excel标题中的

在R中创建一个顺序字母列表,如excel标题中的
EN

Stack Overflow用户
提问于 2020-05-28 10:29:42
回答 3查看 675关注 0票数 3

如何在R中创建像excel列标题这样的顺序字母列表?我的excel文件中有559列,所以我想创建一个顺序字母的向量,如"A,B,…Z,AA,AB,……AZ,……BA,BB,……“这是为了我可以创建自己的数据字典,所以想要“映射”到excel的列标题。

EN

Stack Overflow用户

发布于 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。

代码语言:javascript
复制
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)))
}

测试

代码语言:javascript
复制
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,我的答案和这里的答案不同,所以你也可以看看这些。

票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62062531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档