2015-11-18 8 views
1

Я пытаюсь сопоставить уникальных авторов из файла bibTEX в R, используя grepl(), но у меня возникают проблемы с его совпадением с тем, (а не только один или другой). Только имя фамилии было бы хорошим, но в моей библиографии есть несколько авторов с тем же именем.Использование grepl в R, чтобы соответствовать фамилии и именам из списка соавторов

Мой входной файл (например) - dat.bib:

@article{ test1, 
Author = {Williams, Kate and Williams, Jeff}, 
Title = {{Test1}}, 
Journal = {{Testy}}, 
Year = {{2010}}, 
} 

@article{ test2, 
Author = {Williams, Leroy and Williams, Rory}, 
Title = {{Test2}}, 
Journal = {{Testy}}, 
Year = {{2010}}, 
} 

А теперь, что я попытался в R

test <- read.bib("C/....dat.bib") 
authors<- lapply(test, function(x) x$author) 

дает:

$test1 
[1] "Kate Williams" "Jeff Williams" 

$test2 
[1] "Leroy Williams" "Rory Williams" 

Я не могу использовать результаты деятельности "авторов в одиночку, потому что я пытаюсь анализ соавтор, и это будет возвращать один и тот же автор, как отдельные результаты, если они в соавторстве с несколько документов.

Я попытался сопоставления уникальных авторов:

unique.authors <- unique((unlist(authors))[grepl('family', names(unlist(authors)),ignore.case=TRUE)]) 

возвращающий:

[1] "Williams" 

и

unique.authors <- unique((unlist(authors))[grepl('given', names(unlist(authors)),ignore.case=TRUE)]) 

возвращает:

[1] "Kate" "Jeff" "Leroy" "Rory". 

Но то, что я хочу, это уникальные авторы вернуть

"Kate Williams" "Jeff Williams" "Leroy Williams" "Rory Williams" 

Я пытался связывать «семью» и «приведенные аргументы вместе

x <- c("family", "given") 
unique.authors <- unique((unlist(authors))[grepl(x, names(unlist(authors)))]) 

Который дает предупреждение:

In grepl(x, names(unlist(authors))) : 
argument 'pattern' has length > 1 and only the first element will be used. 

Есть ли способ связать аргументы параметров вместе или связать «family» и «given» в файле bibtex?

Я все еще новичок, любая помощь очень ценится!

ответ

1

Если вы хотите использовать полные имена авторов как атомы, то вам, вероятно, следует преобразовать их в строки (обратите внимание, что read.bib возвращает объекты класса person), например.

authors <- lapply(test, function(x) as.character(x$author)) 
unique(unlist(authors)) 

возвращает

[1] "Kate Williams" "Jeff Williams" "Leroy Williams" "Rory Williams" 
+0

Большое спасибо :) – mlcyo