情节中的长串并不总是有吸引力。在R中缩写首字母缩写词的最短方法是什么?例如,“Hello world”到“HW”,并且最好有独特的首字母缩略词。
有abbreviate
函数,但它只删除了短语中的一些字母,而不是取每个单词的第一个字母。
答案 0 :(得分:10)
一种简单的方法是使用strsplit
,substr
和make.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"