我可以使用 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"
我有 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"