Можно ли преобразовать строку слов в аббревиатуру в R и объединить ее с данными из других строк? - PullRequest
3 голосов
/ 07 декабря 2010

Вот пример набора данных:

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 ]

6 голосов
/ 07 декабря 2010

Вы хотите abbreviate

R> abbreviate('test title one two three')
test title one two three 
             "ttott" 
4 голосов
/ 07 декабря 2010

Вот одна возможность, из которой вы можете построить:

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 слова, и это нужно исправить, если это не так

1 голос
/ 22 августа 2018

Если вы действительно хотите аббревиатуру, а не аббревиатуру, вы можете использовать следующие функции:

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

Пример:

> acronymatize("One Two Three")
[1] "OTT"
0 голосов
/ 25 марта 2019
accronym <- function(x)
{
  s <- strsplit(as.character(x)," ")
  s1 <- lapply(s,substring,1,1)
  s2 <- lapply(s1,paste,collapse="",sep="")
  unlist(s2)
}

Ответ Патрика работает, когда есть один элемент, который нужно сделать акронимом.Однако, если нужно ввести более одного элемента, возможно, вышеуказанная функция может работать лучше.Вместо выбора 1-го элемента в s я преобразую весь список в краткую форму.Я использовал слишком сложный метод, прежде чем увидел ответ Патрика, спасибо за предложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...