r将字符串填充到相同长度

r将字符串填充到相同长度,r,string,stringr,R,String,Stringr,经过几个小时的搜索,我需要帮助 我想做的是: 确保所有字符串的填充长度相同,为26个字符 数据集: library(stringr) names <- structure(list( names = c( "A", "ABC", "ABCDEFG", "ABCDEFGHIJKLMNOP", "AB",

经过几个小时的搜索,我需要帮助

我想做的是: 确保所有字符串的填充长度相同,为26个字符

数据集:

  library(stringr)

  names <-
  structure(list(
    names = c(
      "A",
      "ABC",
      "ABCDEFG",
      "ABCDEFGHIJKLMNOP",
      "AB",
      "ABCDEFGHI",
      "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
      "ABCDEFGHIJKL",
      "ABCDEFGHIJKLMNOPQR",
      "ABCDEFGHIJKLMNOP",
      "ABCDEFGHIJKLMNO"
    )
  ),
  class = "data.frame",
  row.names = c(NA,-11L))
非常感谢您的帮助。

这里我们只需要

library(dplyr)
mx <- as.numeric(max(nchar(names$Name)))
names$Name <- str_pad(names$Name, mx, side = "right", pad = "0")
names$Name

注意:最好不要使用函数名或参数名命名对象

library(dplyr)
mx <- as.numeric(max(nchar(names$Name)))
names$Name <- str_pad(names$Name, mx, side = "right", pad = "0")
names$Name


注意:最好不要使用函数名或参数名来命名对象

我想您需要format函数。设置宽度,然后左对齐、右对齐或居中对齐:


format(names, width = 26, justify = "left")

# Name
# 1  A                         
# 2  ABC                       
# 3  ABCDEFG                   
# 4  ABCDEFGHIJKLMNOP          
# 5  AB                        
# 6  ABCDEFGHI                 
# 7  ABCDEFGHIJKLMNOPQRSTUVWXYZ
# 8  ABCDEFGHIJKL              
# 9  ABCDEFGHIJKLMNOPQR        
# 10 ABCDEFGHIJKLMNOP          
# 11 ABCDEFGHIJKLMNO           


我想你需要格式化功能。设置宽度,然后左对齐、右对齐或居中对齐:


format(names, width = 26, justify = "left")

# Name
# 1  A                         
# 2  ABC                       
# 3  ABCDEFG                   
# 4  ABCDEFGHIJKLMNOP          
# 5  AB                        
# 6  ABCDEFGHI                 
# 7  ABCDEFGHIJKLMNOPQRSTUVWXYZ
# 8  ABCDEFGHIJKL              
# 9  ABCDEFGHIJKLMNOPQR        
# 10 ABCDEFGHIJKLMNOP          
# 11 ABCDEFGHIJKLMNO           


使用
rep
paste(…,collapse=“”)
(类似于pythong的
join
)和
Vectorize()
并关闭
pad
(意味着只是从参数列表中抓取pad),可以快速创建pad字符串生成器
reps
。 使用
paste0
可以按元素
连接
字符向量

pad_strings <- function(char_vec, max_len=NULL, pad="0") {
  reps <- Vectorize(function(n) paste(rep(pad, n), collapse=""))
  lengths <- nchar(char_vec)
  if (is.null(max_len)) max_len <- max(lengths)
  diffs <- max_len - lengths
  paste0(char_vec, reps(diffs))
}

> pad_strings(char_vec)
 [1] "A0000000000000000000000000" "ABC00000000000000000000000"
 [3] "ABCDEFG0000000000000000000" "ABCDEFGHIJKLMNOP0000000000"
 [5] "AB000000000000000000000000" "ABCDEFGHI00000000000000000"
 [7] "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "ABCDEFGHIJKL00000000000000"
 [9] "ABCDEFGHIJKLMNOPQR00000000" "ABCDEFGHIJKLMNOP0000000000"
[11] "ABCDEFGHIJKLMNO00000000000"

pad_strings使用
rep
paste(…,collapse=“”)
(类似于pythong的
join
,用于字符串的向量化)和
Vectorize()
并关闭
pad
(意思是从参数列表中绘制pad),可以快速创建pad string生成器
reps
。 使用
paste0
可以按元素
连接
字符向量

pad_strings <- function(char_vec, max_len=NULL, pad="0") {
  reps <- Vectorize(function(n) paste(rep(pad, n), collapse=""))
  lengths <- nchar(char_vec)
  if (is.null(max_len)) max_len <- max(lengths)
  diffs <- max_len - lengths
  paste0(char_vec, reps(diffs))
}

> pad_strings(char_vec)
 [1] "A0000000000000000000000000" "ABC00000000000000000000000"
 [3] "ABCDEFG0000000000000000000" "ABCDEFGHIJKLMNOP0000000000"
 [5] "AB000000000000000000000000" "ABCDEFGHI00000000000000000"
 [7] "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "ABCDEFGHIJKL00000000000000"
 [9] "ABCDEFGHIJKLMNOPQR00000000" "ABCDEFGHIJKLMNOP0000000000"
[11] "ABCDEFGHIJKLMNO00000000000"

pad_strings您的预期输出示例中的列名是'name'所有名称填充到相同长度26。您的预期输出是什么示例中的列名是'name'所有名称填充到相同长度26。是的,这一点很好,谢谢我会注意命名对象。此解决方案在控制台中看起来不错,但在环境中的数据集中却不太合适。这是为什么?@Keelin你需要分配(
是的,我就是这么做的。@Keelin现在,检查
名称
数据,它将有更新的列谢谢,太好了:)是的,这很好,谢谢,我会注意命名对象。此解决方案在控制台中看起来不错,但在环境中的数据集中却不太合适。这是为什么?@Keelin您需要分配(
是的,我确实这样做了。@Keelin现在,检查
名称
数据,这些数据将有更新的列。非常感谢:)
pad_strings <- function(char_vec, max_len=NULL, pad="0") {
  reps <- Vectorize(function(n) paste(rep(pad, n), collapse=""))
  lengths <- nchar(char_vec)
  if (is.null(max_len)) max_len <- max(lengths)
  diffs <- max_len - lengths
  paste0(char_vec, reps(diffs))
}

> pad_strings(char_vec)
 [1] "A0000000000000000000000000" "ABC00000000000000000000000"
 [3] "ABCDEFG0000000000000000000" "ABCDEFGHIJKLMNOP0000000000"
 [5] "AB000000000000000000000000" "ABCDEFGHI00000000000000000"
 [7] "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "ABCDEFGHIJKL00000000000000"
 [9] "ABCDEFGHIJKLMNOPQR00000000" "ABCDEFGHIJKLMNOP0000000000"
[11] "ABCDEFGHIJKLMNO00000000000"