在前N个字符后截断字符串

aka*_*h87 6 r

我有一个字符串向量,范围从3个字符到59个字符.我试图在10个字符后用"..."截断任何大于13个字符的字符串.例如,如果

a <- c("AMS", "CCD", "TCGGCKGTPGPHOLKP", "NOK", "THIS IS A LONG STRING", "JSQU909LPPLU")
Run Code Online (Sandbox Code Playgroud)

然后我想得到

"AMS"   "CCD"   "TCGGCKGTPG..."   "NOK"   "THIS IS A ..."   "JSQU909LPPLU"
Run Code Online (Sandbox Code Playgroud)

我相信它需要一份if声明gsub,我的问题就是gsub.有什么想法吗?

Ric*_*ven 9

这个操作已经有一个打包的功能.尝试str_trunc()使用stringr包,将宽度设置为13(10个字符+ 3个点).

stringr::str_trunc(a, 13)
# [1] "AMS"           "CCD"           "TCGGCKGTPG..." "NOK"           
# [5] "THIS IS A ..." "JSQU909LPPLU" 
Run Code Online (Sandbox Code Playgroud)


小智 6

我认为最简单的方法是使用substr,不需要任何包

      a <- c("AMS", "CCD", "TCGGCKGTPGPHOLKP", "NOK", "THIS IS A LONG STRING","JSQU909LPPLU")
  
 #It will keep only chars from 1-10 for each element
      substr(a,1,10)

[1] "AMS"        "CCD"        "TCGGCKGTPG" "NOK"        "THIS IS A "
[6] "JSQU909LPP"
Run Code Online (Sandbox Code Playgroud)


PoG*_*bas 5

解决方案使用ifelsesubstring

编辑(在@ G5W注释之后):

a <- c("AMS", "CCD", "TCGGCKGTPGPHOLKP", "NOK", "THIS IS A LONG STRING", "JSQU909LPPLU")
ifelse(nchar(a) > 13, paste0(substring(a, 1, 10), "..."), a)
Run Code Online (Sandbox Code Playgroud)

  • `ifelse(nchar(a)&gt; 13,paste0(substring(a,1,10),“ ...”),a)会更简单 (2认同)