我有一个字符串向量,范围从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.有什么想法吗?
这个操作已经有一个打包的功能.尝试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)
解决方案使用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)
Run Code Online (Sandbox Code Playgroud)