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

構築できる可能性の 1 つを次に示します。

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 に答える
0
accronym <- function(x)
{
  s <- strsplit(as.character(x)," ")
  s1 <- lapply(s,substring,1,1)
  s2 <- lapply(s1,paste,collapse="",sep="")
  unlist(s2)
}

Patrick の答えは、頭字語にする要素が 1 つだけの場合に機能します。ただし、入力する要素が複数ある場合は、おそらく上記の関数の方が適切に機能する可能性があります。s の最初の要素を選択する代わりに、リスト全体を短い形式に変換しています。提案に感謝するパトリックの答えを見る前に、私はあまりにも複雑な方法を使用していました。

于 2019-03-25T18:56:00.413 に答える