我可以使用 R 根据它们的 nchar 长度和它们的当前值重命名向量元素吗?

Can I rename vector elements based on their nchar length and their current values using R?

我有 6 个矢量值

vec<-c("Col1","Col2islonger","Col3isabitlonger","Col4isless","Col5willbelongest")

我运行

nchar(vec)

我的成绩是

4,12,16,10,17

基于这些值,我想 运行 一个条件语句或 for 循环,以更好的方式根据列的长度和当前值重命名列。例如

如果 nchar(vec) 小于或等于 10,则保持名称不变。如果它大于 10,请确保重命名的元素采用前 9 个值并跳到最后一个。

newvec<- c("Col1","Col2islonr","Col3isabir","Col4isless","Col5willbt")

我们可以用sub到trim的vec。我们用 'vec' ('i1') 的字符数创建一个逻辑向量。使用它,我们更新那些大于 10 个字符的元素,以删除第 10 个和最后一个字符之间的字符 sub 并更新它

i1 <- nchar(vec)  > 10
vec[i1] <-  sub("^(.{1,9}).*(.)", "\1\2", vec[i1])

-输出

vec
#[1] "Col1"       "Col2islonr" "Col3isabir" "Col4isless" "Col5willbt"     

试试这个:

#Data
vec<-c("Col1","Col2islonger","Col3isabitlonger","Col4isless","Col5willbelongest")
#Rename
vec2 <- ifelse(nchar(vec)<=10,vec,paste0(substr(vec,1,9),substr(vec,nchar(vec),nchar(vec))))

输出:

[1] "Col1"       "Col2islonr" "Col3isabir" "Col4isless" "Col5willbt"