Nothing
utils::globalVariables(c("PY","TC"))
#' Bibliometric Analysis
#'
#' It performs a bibliometric analysis of a dataset imported from SCOPUS and Clarivate Analytics Web of Science databases.
#'
#' @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 sep is the field separator character. This character separates strings in each column of the data frame. The default is \code{sep = ";"}.
#' @return \code{biblioAnalysis} returns an object of \code{class} "bibliometrix".
#'
#' The functions \code{\link{summary}} and \code{\link{plot}} are used to obtain or print a summary and some useful plots of the results.
#'
#' An object of \code{class} "bibliometrix" is a list containing the following components:
#'
#' \tabular{lll}{
#' Articles \tab \tab the total number of manuscripts\cr
#' Authors \tab \tab the authors' frequency distribution\cr
#' AuthorsFrac \tab \tab the authors' frequency distribution (fractionalized)\cr
#' FirstAuthors \tab \tab corresponding author of each manuscript\cr
#' nAUperPaper \tab \tab the number of authors per manuscript\cr
#' Appearances \tab \tab the number of author appearances\cr
#' nAuthors \tab \tab the number of authors\cr
#' AuMultiAuthoredArt \tab \tab the number of authors of multi-authored articles\cr
#' MostCitedPapers \tab \tab the list of manuscripts sorted by citations\cr
#' Years \tab \tab publication year of each manuscript\cr
#' FirstAffiliation \tab \tab the affiliation of the first author\cr
#' Affiliations \tab \tab the frequency distribution of affiliations (of all co-authors for each paper)\cr
#' Aff_frac \tab \tab the fractionalized frequency distribution of affiliations (of all co-authors for each paper)\cr
#' CO \tab \tab the affiliation country of the first author\cr
#' Countries \tab \tab the affiliation countries' frequency distribution\cr
#' CountryCollaboration \tab \tab Intra-country (SCP) and intercountry (MCP) collaboration indices\cr
#' TotalCitation \tab \tab the number of times each manuscript has been cited\cr
#' TCperYear \tab \tab the yearly average number of times each manuscript has been cited\cr
#' Sources \tab \tab the frequency distribution of sources (journals, books, etc.)\cr
#' DE \tab \tab the frequency distribution of authors' keywords\cr
#' ID \tab \tab the frequency distribution of keywords associated to the manuscript by SCOPUS and Clarivate Analytics Web of Science database}
#'
#'
#' @examples
#' \dontrun{
#' data(management, package = "bibliometrixData")
#'
#' results <- biblioAnalysis(management)
#'
#' summary(results, k = 10, pause = FALSE)
#' }
#'
#' @seealso \code{\link{convert2df}} to import and convert an WoS or SCOPUS Export file in a bibliographic data frame.
#' @seealso \code{\link{summary}} to obtain a summary of the results.
#' @seealso \code{\link{plot}} to draw some useful plots of the results.
#'
#' @export
biblioAnalysis<-function(M,sep=";"){
# initialize variables
Authors=NULL
Authors_frac=NULL
FirstAuthors=NULL
PY=NULL
FAffiliation=NULL
Affiliation=NULL
Affiliation_frac=NULL
CO=rep(NA,dim(M)[1])
TC=NULL
TCperYear=NULL
SO=NULL
Country=NULL
DE=NULL
ID=NULL
MostCitedPapers=NULL
# M is the bibliographic dataframe
Tags<-names(M)
if (!("SR" %in% Tags)){M=metaTagExtraction(M,"SR")}
# temporal analyis
if ("PY" %in% Tags){PY <- as.numeric(M$PY)}
# Author's distribution
if ("AU" %in% Tags){
listAU=strsplit(as.character(M$AU),sep)
listAU=lapply(listAU, function(l) trim(l))
#nAU=unlist(lapply(listAU,length)) # num. of authors per paper
nAU <- lengths(listAU)
#fracAU=unlist(lapply(nAU,function(x){rep(1/x,x)})) # fractional frequencies
fracAU <- rep(1/nAU,nAU)
AU=unlist(listAU)
Authors=sort(table(AU),decreasing=TRUE)
Authors_frac=aggregate(fracAU,by=list(AU),'sum')
names(Authors_frac)=c("Author","Frequency")
Authors_frac=Authors_frac[order(-Authors_frac$Frequency),]
FirstAuthors=unlist(lapply(listAU,function(l){
if (length(l)>0){l=l[[1]]} else {l=NA}
return(l)
}))
AuSingleAuthoredArt=length(unique(FirstAuthors[nAU==1]))
AuMultiAuthoredArt=length(Authors)-AuSingleAuthoredArt
}
#PY=as.numeric(M$PY)
#Total Citation Distribution
if ("TC" %in% Tags){
TC=as.numeric(M$TC)
CurrentYear=as.numeric(format(Sys.Date(),"%Y"))
TCperYear=TC/(CurrentYear-PY+1)
if (!("DI" %in% names(M))) M$DI <- ""
MostCitedPapers <- data.frame(M$SR,M$DI,TC,TCperYear,PY) %>%
group_by(PY) %>%
mutate(NTC = TC/mean(TC)) %>%
ungroup() %>%
select(-PY) %>%
arrange(desc(TC)) %>%
as.data.frame()
names(MostCitedPapers)=c("Paper ","DOI","TC","TCperYear","NTC")
}
# References
nReferences <- 0
if ("CR" %in% Tags){
CR <- tableTag(M,"CR",sep)
nReferences <- length(CR)
}
# ID Keywords
if ("ID" %in% Tags){ID <- tableTag(M,"ID",sep)}
# DE Keywords
if ("DE" %in% Tags){DE=tableTag(M,"DE",sep)}
# Sources
if ("SO" %in% Tags){
SO=gsub(",","",M$SO,fixed=TRUE)
SO=sort(table(SO),decreasing = TRUE)
}
# All Affiliations, First Affiliation and Countries
if (("C1" %in% Tags) & (sum(!is.na(M$C1))>0)){
if(!("AU_UN" %in% Tags)){M=metaTagExtraction(M,Field="AU_UN")}
AFF=M$AU_UN
listAFF=strsplit(AFF,sep,fixed=TRUE)
nAFF=unlist(lapply(listAFF,length))
listAFF[nAFF==0]="NA"
fracAFF=unlist(sapply(nAFF,function(x){
if(x>0){x=rep(1/x,x)}else{
x=0}
})) # fractional frequencies
AFF=trim.leading(unlist(listAFF)) # delete spaces
Affiliation=sort(table(AFF),decreasing=TRUE)
Affiliation_frac=aggregate(fracAFF,by=list(AFF),'sum')
names(Affiliation_frac)=c("Affiliation","Frequency")
Affiliation_frac=Affiliation_frac[order(-Affiliation_frac$Frequency),]
# First Affiliation
FAffiliation=lapply(listAFF,function(l) l[1])
# Countries
data("countries",envir=environment())
countries=as.character(countries[[1]])
### new code{
if (!("AU1_CO" %in% names(M))){
M=metaTagExtraction(M,Field="AU1_CO",sep)}
CO=M$AU1_CO
Country=tableTag(M,"AU1_CO")
SCP_MCP=countryCollaboration(M,Country,k=length(Country),sep)
}else{
M$AU1_CO=NA
SCP_MCP=data.frame(Country=rep(NA,1),SCP=rep(NA,1))
}
if ("DT" %in% names(M)){
Documents=table(M$DT)
n=max(nchar(names(Documents)))
names(Documents)=substr(paste(names(Documents)," ",sep=""),1,n+5)
}else{Documents=NA}
# international collaboration
if (!("AU_CO" %in% names(M))){M=metaTagExtraction(M,Field="AU_CO",sep)}
Coll <- unlist(lapply(strsplit(M$AU_CO,sep), function(l){
length(unique(l))>1
}))
results=list(Articles=dim(M)[1], # Articles
Authors=Authors, # Authors' frequency distribution
AuthorsFrac=Authors_frac, # Authors' frequency distribution (fractionalized)
FirstAuthors=FirstAuthors, # First Author's list
nAUperPaper=nAU, # N. Authors per Paper
Appearances=sum(nAU), # Author appearances
nAuthors=dim(Authors), # N. of Authors
AuMultiAuthoredArt=AuMultiAuthoredArt, # N. of Authors of multi-authored articles
AuSingleAuthoredArt=AuSingleAuthoredArt, # N. of Authors of single-authored articles
MostCitedPapers=MostCitedPapers,# Papers sorted by citations
Years=PY, # Years
FirstAffiliation=unlist(FAffiliation), # Affiliation of First Author
Affiliations=Affiliation, # Affiliations of all authors
Aff_frac=Affiliation_frac, # Affiliations of all authors (fractionalized)
CO=CO, # Country of each paper
Countries=Country, # Countries' frequency distribution
CountryCollaboration=SCP_MCP, # Intracountry (SCP) and intercountry (MCP) collaboration
TotalCitation=TC, # Total Citations
TCperYear=TCperYear, # Total Citations per year
Sources=SO, # Sources
DE=DE, # Keywords
ID=ID, # Authors' keywords
Documents=Documents,
IntColl=sum(Coll)/nrow(M)*100,
nReferences = nReferences, # N. of References
DB=M$DB[1])
class(results)<-"bibliometrix"
return(results)
}
countryCollaboration<-function(M,Country,k,sep){
if (!("AU_CO" %in% names(M))){M=metaTagExtraction(M,Field="AU_CO",sep)}
M$SCP=0
M$SCP_CO=NA
for (i in 1:dim(M)[1]){
if (!is.na(M$AU_CO[i])){
co=M$AU_CO[i]
co=table(unlist(strsplit(co,";")))
if (length(co)==1){M$SCP[i]=1}
M$SCP_CO[i]=M$AU1_CO[i]
} else {M$SCP[i]=NA}
}
CO=names(Country)[1:k]
df=data.frame(Country=rep(NA,k),SCP=rep(0,k))
for (i in 1:length(CO)){
co=CO[i]
df$Country[i]=co
df$SCP[i]=sum(M$SCP[M$SCP_CO==co],na.rm = T)
}
df$MCP=as.numeric(tableTag(M,"AU1_CO")[1:k])-df$SCP
return(df)
}
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.