R中字符串的自动缩写词

时间:2013-12-01 06:08:10

标签: string r parsing

情节中的长串并不总是有吸引力。在R中缩写首字母缩写词的最短方法是什么?例如,“Hello world”到“HW”,并且最好有独特的首字母缩略词。

abbreviate函数,但它只删除了短语中的一些字母,而不是取每个单词的第一个字母。

2 个答案:

答案 0 :(得分:10)

一种简单的方法是使用strsplitsubstrmake.unique的组合。

这是一个可以编写的示例函数:

makeInitials <- function(charVec) {
  make.unique(vapply(strsplit(toupper(charVec), " "), 
                     function(x) paste(substr(x, 1, 1), collapse = ""), 
                     vector("character", 1L)))
}

测试出来:

X <- c("Hello World", "Home Work", "holidays with children", "Hello Europe")
makeInitials(X)
# [1] "HW"   "HW.1" "HWC"  "HE"  

那就是说,如果你使用它的一些论点,我认为abbreviate就足够了:

abbreviate(X, minlength=1)
#            Hello World              Home Work holidays with children           Hello Europe 
#                  "HlW"                  "HmW"                  "hwc"                   "HE" 

答案 1 :(得分:2)

使用正则表达式,您可以执行以下操作。正则表达式模式((?<=\\s).|^.)查找任何字母后跟空格或字符串的第一个字母。然后我们只使用paste参数生成collapse个向量来获得基于首字母的首字母缩略词。正如阿南达建议的那样,如果你想通过make.unique做出独特的传递结果。

X <- c("Hello World", "Home Work", "holidays with children")
sapply(regmatches(X, gregexpr(pattern = "((?<=\\s).|^.)", text = X, perl = T)), paste, collapse = ".")
## [1] "H.W"   "H.W"   "h.w.c"

# If you want to make unique
make.unique(sapply(regmatches(X, gregexpr(pattern = "((?<=\\s).|^.)", text = X, perl = T)), paste, collapse = "."))
## [1] "H.W"   "H.W.1" "h.w.c"