如何将列表项添加到 r 中另一个列表内的新数据框列?

How to add list items to a new dataframe column inside another list in r?

我正在尝试提取 pubmed 上所有出版物的合著者姓名和隶属关系。我能够在数据框中获取作者姓名列表,但现在我需要添加该姓名的从属关系。我一直在尝试这样做,但我不确定该怎么做。

我需要合并两个列表:作者和每个作者的隶属关系。

query = "an author's name"

res <- EUtilsSummary(query, db="pubmed", mindate=2015, maxdate=2019)
QueryCount(res)

auths <- Author(EUtilsGet(res))
affs <- Affiliation(EUtilsGet(res))

Last<-sapply(auths, function(x)paste(x$LastName, x$ForeName, sep = ", "))
auths2<-as.data.frame(sort(table(unlist(Last)), dec=TRUE))
names(auths2)<-c("name")
auths2

我正在使用 RISMed 提取数据。我想要以下格式的数据:

姓氏,名字隶属关系

我不关心计数。

我想换一种方式来看待这个问题是这样的:

合并两个列表。

list A是一个dataframe列表:这个列表中有多个项目,每个项目有以下内容

LastName   ForeName   Initials
A          B          AB
C          D          CD

列表 B 是列表的列表:

Affiliations:
"X university"
"Y University"

我想要做的是将这两个列表组合在一起,以便每个作者的隶属关系显示为数据框上的一列。最终结果如下:

LastName   ForeName   Initials   Affiliations
A          B          AB         "X University"
C          D          CD         "Y University"

由于某些查询可以 return NA 作者的值和零长度的隶属关系向量,我做了一个小函数,如果两个列表条目都正确,则只有 cbind() 值:

special_cbind = function(authors,affiliations){
  if(length(affiliations) == 0 | all(is.na(authors)) ){
    authors
  }
  else if(nrow(authors) == length(affiliations)){
    cbind(authors,affiliations)
  }
  else{
    affiliations = rep(affiliations,nrow(authors))
    cbind(authors,affiliations)
  }

}

然后使用 Map 将其应用于每个列表条目。

Map(special_cbind,auths,affs)

这对您的数据有用吗?