我有一个字符串向量,范围从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
。有什么想法吗?
答案 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)
使用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)
答案 2 :(得分:0)
有点更快...
ifelse(nchar(a) > 13, paste0(strtrim(a, 10), '...'), a)