是否可以使用R根据矢量元素的nchar长度和当前值来重命名矢量元素?

问题描述

我有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","Col5willbt")

解决方法

我们可以使用class Simple: simpleDic = { 'name': {""},'age': {1}} def __init__(self,name,age): self.simpleDic['name'] = name self.simpleDic['age'] = age def __str__(self): return "{} {}\n".format(self.simpleDic['name'],self.simpleDic['age']) def foo(): myDict = {} for x in range(3): myDict[x] = Simple('Name' + str(x),x) print(('{}: {}\n'.format("Creating",myDict[x]))) for key in myDict: print(('{}: {}\n'.format("Printing" + str(key),myDict[key]))) #### Main program here #### foo() 修剪sub。我们创建一个逻辑矢量,其字符数为“ vec”(i1)。使用该代码,我们更新大于10个字符的元素,以使用vec删除第10个字符与最后一个字符之间的字符,并对其进行更新

sub

-输出

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

尝试一下:

#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"