4

这是一个示例数据集:

data <- data.frame (author = c('bob', 'john', 'james'), 
                    year = c(2000, 1942, 1765), 
                    title = c('test title one two three', 
                              'another test title four five', 
                              'third example title'))

我想自动化制作 bibtex 引用的过程,例如使用这样的函数:

bibtexify <- function (author, year, title) {
      acronym <- convert.to.acronym(title)
      paste(author, year, acronym, sep='')
      }

这样我得到以下结果:

with(data, bibtexify(author, year, title))
[1] 'bob2000tto'
[2] 'john1942att'
[3] 'james1765tet'

可以在R中做到这一点吗?

4

4 回答 4

10

你要abbreviate

R> abbreviate('test title one two three')
test title one two three 
             "ttott" 
于 2010-12-07T17:13:36.220 回答
4

这是您可以构建的一种可能性:

title <- c('test title one two three',  
                              'another test title four five',  
                              'third example title')
library(gsubfn)
sapply( strapply(title, "([a-zA-Z])[a-zA-Z]*"), function(x) paste(x[1:3], collapse=''))

这假设每个标题中至少有 3 个单词,如果不是这种情况,则需要修复。

于 2010-12-07T17:14:24.613 回答
1

如果你真的想要一个首字母缩写词,而不是一个缩写,你可以使用这个函数:

acronymatize <- function(x) {
  s <- strsplit(x, " ")[[1]]
  paste((substring(s, 1,1)),
        sep="", collapse="")
}

例子:

> acronymatize("One Two Three")
[1] "OTT"
于 2018-08-21T23:54:51.340 回答
0
accronym <- function(x)
{
  s <- strsplit(as.character(x)," ")
  s1 <- lapply(s,substring,1,1)
  s2 <- lapply(s1,paste,collapse="",sep="")
  unlist(s2)
}

当有一个元素要作为首字母缩略词时,Patrick 的答案是有效的。但是,如果要输入多个元素,则上述功能可能会更好。我没有选择 s 中的第一个元素,而是将整个列表转换为短格式。在看到帕特里克的回答之前,我使用了过于复杂的方法,感谢您的建议。

于 2019-03-25T18:56:00.413 回答