r - 将整数序列 1, 2, 3, ... 转换为相应的字符串序列 A, B, C,

标签 r

将整数 1 到 N 转换为相应长度的字符串“A”、“B”、...“Z”、“AA”、“AB”...的快速、可扩展的方法是什么?

或者,我很乐意将整数向量映射到字符向量上,这样字符向量的每个元素都具有相同数量的字符。例如。 1, 2, ... 27 => "AA", "AB", ..., "AZ", "BA"

示例输入:

num_vec <- seq(1, 1000)
char_vec <- ???

更新

我的骇人听闻但最好的工作尝试:
library(data.table)
myfunc <- function(n){
  if(n <= 26){
    dt <- CJ(LETTERS)[, Result := paste0(V1)]
  } else if(n <= 26^2){
    dt <- CJ(LETTERS, LETTERS)[, Result := paste0(V1, V2)]
  } else if(n <= 26^3){
    dt <- CJ(LETTERS, LETTERS, LETTERS)[, Result := paste0(V1, V2, V3)]
  } else if(n <= 26^4){
    dt <- CJ(LETTERS, LETTERS, LETTERS, LETTERS)[, Result := paste0(V1, V2, V3, V4)]
  } else if(n <= 26^5){
    dt <- CJ(LETTERS, LETTERS, LETTERS, LETTERS, LETTERS)[, Result := paste0(V1, V2, V3, V4, V5)]
  } else if(n <= 26^6){
    dt <- CJ(LETTERS, LETTERS, LETTERS, LETTERS, LETTERS, LETTERS)[, Result := paste0(V1, V2, V3, V4, V5, V6)]
  } else{
    stop("n too large")
  }

  return(dt$Result[1:n])
}

myfunc(10)

最佳答案

评论中已经发布了几个不错的解决方案。只有@Gregor 发布的解决方案 here目前正在提供 Ben 的首选解决方案。

但是,@eddi、@DavidArenburg 和@G.Grothendieck 发布的方法也可以调整以获得首选结果:

# adaptation of @eddi's method:
library(data.table)
n  <- 29
sz  <- ceiling(log(n)/log(26))
do.call(CJ, replicate(sz, c("", LETTERS), simplify = F))[-1, unique(Reduce(paste0, .SD))][1:n]

# adaptation of @DavidArenburg's method:
n <- 29
list(LETTERS, c(LETTERS, do.call(CJ, replicate((n - 1) %/% 26 + 1, LETTERS, simplify = FALSE))[, do.call(paste0, .SD)][1:(n-26)])[[(n>26)+1]]

# adaptation of @G.Grothendieck's method:
n  <- 29
sz  <- ceiling(log(n)/log(26))
g <- expand.grid(c('',LETTERS), rep(LETTERS, (sz-1)))
g <- g[order(g$Var1),]
do.call(paste0, g)[1:n]

所有三个结果:
 [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"

关于r - 将整数序列 1, 2, 3, ... 转换为相应的字符串序列 A, B, C,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39731762/

相关文章:

r - 在列表定义中使用 rlang::sym

sql - 使用 RMySQL 的临时表

r - 在 R 中找到第二低的非零值

r - 当某些 id 的行数多于其他 id 时,按 id 对数据帧中的行进行采样

r - ggplot构面网格y轴某些值不可见如何调整网格

r - 为什么R的data.table比pandas快得多?

r - 数据表有向量作为条目 - 如何找出在哪一列中,然后只将向量的第二个条目作为单个整数

r - 在 Rcpp 中按列对数据框排序

r - 计算 grouped_df dplyr 中非 NA 列的数量

string - 访问R中str_split分割的各个值,找到最后一个?