Как извлечь слова из списка фреймов данных списка MESH из PubMed в R - PullRequest
0 голосов
/ 13 февраля 2019

Я пытался извлечь данные из фрейма данных, который имеет вложенный список, но после попытки использовать строковую функцию (str_detect) я могу работать только с переменной Аннотация. Вот пример моих данных

{r setup, include=FALSE}
library(RISmed)
library(reticulate)
library(dplyr)
library(tibble)
library(stringr)
RCT_topic <- 'Randomized Clinical Trial'
RCT_query <- EUtilsSummary(RCT_topic, mindate=2005, maxdate=2015, retmax=2000)
summary(RCT_query)
RCT_records <- EUtilsGet(RCT_query)
RCT_data <- data_frame('PMID'=PMID(RCT_records),
                       'Title'=ArticleTitle(RCT_records),
                       'Abstract'=AbstractText(RCT_records),
                       'Year Published'=YearPubmed(RCT_records),
                       'Month Published'=MonthPubmed(RCT_records),
                       'Country'= Country(RCT_records),
                       'Grant' =GrantID(RCT_records),
                       'Acronym' =Acronym(RCT_records),
                       'Agency' =Agency(RCT_records),
                       'Mesh'=Mesh(RCT_records))
#Latino
RCT_data$Latino <- grepl("Latino|latino|Hispanic|hispanic",RCT_data$Abstract)
table(RCT_data$Latino)
RCT_true = RCT_data[RCT_data$Latino == "TRUE",]
RCT_true %>% str_detect("Hispanic Americans")
RCT_true %>% mutate(Latino_Mesh = ifelse(Mesh %>% str_detect("Latino|latino|Hispanic|hispanic"), "yes", "no"))

В этом коде будет создано подтип из 11 наблюдений, которые R прочитал, в слове есть слово для латиноамериканского или латиноамериканского происхождения Аннотация, я пытаюсь найти способ заставить R прочитать переменную Mesh, но это неКажется, что я не могу прочитать весь вложенный список, даже когда вы видите каждую переменную, вы можете ясно видеть, что слово «латиноамериканский» присутствует в списке

{r}
RCT_true$Mesh

Я пытаюсь найти способтак что R может прочитать RCT_true $ Mesh и вернуть, что Да, в новом столбце есть слово «латиноамериканцы», как я делал это ранее с переменной Abstract

1 Ответ

0 голосов
/ 13 февраля 2019

Поскольку RCT_true $ Mesh - это списки, содержащие фрейм данных, каждый фрейм данных должен оцениваться с помощью функции grepl и сохранять результаты в векторе индексатора (т. Е. RCT_true$Mesh_Latino):

lapply(RCT_true$Mesh, function(x){

   any( grepl("(Latino|latino|Hispanic|hispanic)", as.character(x$Heading) ) )

  }) %>% 
  unlist() %>%
  as.logical() -> RCT_true$Mesh_Latino

RCT_true[RCT_true$Mesh_Latino == "TRUE",]

# # A tibble: 5 x 12
#  PMID  Title Abstract `Year Published` `Month Publishe… Country Grant Acronym Agency Mesh  Latino Mesh_Latino
#  <chr> <chr> <chr>               <dbl>            <dbl> <chr>   <chr> <chr>   <chr>  <lis> <lgl>  <lgl>      
#1 2671… Beyo… "Within…             2015               12 United… CA01… CA      NCI N… <dat… TRUE   TRUE       
#2 2670… Trea… OBJECTI…             2015               12 United… KL2 … TR      NCATS… <dat… TRUE   TRUE       
#3 2669… Vali… "Resear…             2015               12 England NA    NA      NA     <dat… TRUE   TRUE       
#4 2668… The … BACKGRO…             2015               12 United… K23 … MH      NIMH … <dat… TRUE   TRUE       
#5 2665… Heal… BACKGRO…             2015               12 United… R01 … HL      NHLBI… <dat… TRUE   TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...