Nothing
#' Citation frequency distribution
#'
#' It calculates frequency distribution of citations.
#'
#' @param M is a bibliographic data frame obtained by the converting function \code{\link{convert2df}}.
#' It is a data matrix with cases corresponding to manuscripts and variables to Field Tag in the original SCOPUS and Clarivate Analytics Web of Science file.
#' @param field is a character. It can be "article" or "author" to obtain frequency distribution of cited citations or cited authors (only first authors for WoS database) respectively. The default is \code{field = "article"}.
#' @param sep is the field separator character. This character separates citations in each string of CR column of the bibliographic data frame. The default is \code{sep = ";"}.
#' @return an object of \code{class} "list" containing the following components:
#'
#' \tabular{lll}{
#' Cited \tab \tab the most frequent cited manuscripts or authors\cr
#' Year \tab \tab the publication year (only for cited article analysis)\cr
#' Source \tab \tab the journal (only for cited article analysis)}
#'
#'
#'
#' @examples
#' ## EXAMPLE 1: Cited articles
#'
#' data(scientometrics,package = "bibliometrixData")
#'
#' CR <- citations(scientometrics, field = "article", sep = ";")
#'
#' CR$Cited[1:10]
#' CR$Year[1:10]
#' CR$Source[1:10]
#'
#' ## EXAMPLE 2: Cited first authors
#'
#' data(scientometrics)
#'
#' CR <- citations(scientometrics, field = "author", sep = ";")
#'
#' CR$Cited[1:10]
#'
#' @seealso \code{\link{biblioAnalysis}} function for bibliometric analysis.
#' @seealso \code{\link{summary}} to obtain a summary of the results.
#' @seealso \code{\link{plot}} to draw some useful plots of the results.
#'
#' @export
citations <- function(M, field = "article", sep = ";"){
CR=NULL
Year=NULL
SO=NULL
listCR=strsplit(M$CR,sep)
## check for empty CR
if (sum(nchar(listCR)>3, na.rm = TRUE)==0){
cat("\nReference metadata field 'CR' is empty!!\n\n")
return(NA)
}
if (field=="author"){
#listCR=strsplit(M$CR,sep)
if (M$DB[1]=="ISI"){
listCR=lapply(listCR, function(l){
ListL=lapply(strsplit(unlist(l),","),function(x) x[1])
l=trimws(trimES(gsub("[[:punct:]]"," ",unlist(ListL))))
})}
if (M$DB[1]=="SCOPUS"){
listCR=lapply(listCR, function(l){
ListL=lapply(l,function(x) {
a=strsplit(x,"\\., ")
ind=which(grepl("[[:digit:]]", a[[1]]))
if (length(ind)==0) ind=1
x=unlist(a[[1]][1:(ind[1]-1)])
})
l=trimws(trimES(gsub("[[:punct:]]"," ",unlist(ListL))))
})}
}
if (field=="article"){
#listCR=strsplit(M$CR,sep)
listCR=lapply(listCR, function(l){
l=l[grep(",",l)]
})
}
CR=unlist(listCR)
#CR=gsub("\\.","",CR)
CR=CR[nchar(CR)>=3]
CR=trim.leading(CR)
CR=sort(table(CR),decreasing=TRUE)
if (field=="article"){
switch(M$DB[1],
ISI={
listCR=strsplit(rownames(CR),",")
Year=unlist(lapply(listCR, function(l){
if (length(l)>1){
l=suppressWarnings(as.numeric(l[2]))} else{l=NA}
}))
SO=unlist(lapply(listCR, function(l){
if (length(l)>2){
l=l[3]} else{l=NA}
}))
SO=trim.leading(SO)
},
SCOPUS={
REF=names(CR)
y=yearSoExtract(REF)
Year=as.numeric(y$Year)
SO=y$SO
})
}
CR=list(Cited=CR,Year=Year,Source=SO)
return(CR)
}
yearSoExtract <- function(string){
## for scopus references
ind=regexpr("\\([[:digit:]]{4}\\)",string)
ind[is.na(ind)]=-1
string[ind==-1]="(0000)"
ind[ind==-1]=1
attr(ind[ind==-1],"match.length")=6
y=unlist(regmatches(string,ind))
Year=substr(y,2,5)
SO=sub(",.*$","",substr(string,ind+7,nchar(string)))
y=list(Year=Year,SO=SO)
return(y)
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.