代码之家  ›  专栏  ›  技术社区  ›  akash87

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

r
  •  10
  • akash87  · 技术社区  · 7 年前

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

    a <- c("AMS", "CCD", "TCGGCKGTPGPHOLKP", "NOK", "THIS IS A LONG STRING", "JSQU909LPPLU")
    

    然后我想得到

    "AMS"   "CCD"   "TCGGCKGTPG..."   "NOK"   "THIS IS A ..."   "JSQU909LPPLU"
    

    我确信这将需要一个 if 声明和a gsub gsub公司 . 有什么想法吗?

    4 回复  |  直到 7 年前
        1
  •  14
  •   Rich Scriven    7 年前

    此操作已经有一个打包函数。尝试 str_trunc() 斯特林格 包装,将宽度设置为13(10个字符+3个点)。

    stringr::str_trunc(a, 13)
    # [1] "AMS"           "CCD"           "TCGGCKGTPG..." "NOK"           
    # [5] "THIS IS A ..." "JSQU909LPPLU" 
    
        2
  •  9
  •   pogibas    7 年前

    解决方案使用 ifelse substring

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

    a <- c("AMS", "CCD", "TCGGCKGTPGPHOLKP", "NOK", "THIS IS A LONG STRING", "JSQU909LPPLU")
    ifelse(nchar(a) > 13, paste0(substring(a, 1, 10), "..."), a)
    
        3
  •  3
  •   TPArrow    6 年前

    有点快。。。

    ifelse(nchar(a) > 13, paste0(strtrim(a, 10), '...'), a)
    
        4
  •  2
  •   Kalio    3 年前

    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"