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