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

时间:2017-10-15 19:53:33

标签: r

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

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

然后我想得到

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

我确信它需要if语句和gsub,我的问题是gsub。有什么想法吗?

3 个答案:

答案 0 :(得分:7)

此操作已有一个打包功能。从 stringr 包中尝试str_trunc(),将宽度设置为13(10个字符+ 3个点)。

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

答案 1 :(得分: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)

答案 2 :(得分:0)

有点更快...

ifelse(nchar(a) > 13, paste0(strtrim(a, 10), '...'), a)