我有一个数据框,其中的一列包含一个句子列表(一个嵌套列表)
目标
有些句子包含我拥有的一个参考文献列表中的单词,一些包含第二个参考文献列表中的单词,还有一些来自两者。 我想从每个句子的两个单词列表中提取所有单词,如果每个句子中都存在它们,则将它们加入。
示例
ReportText1<-list(c("4 oesophagus biopsies.","Three EMRs seen"))
ReportText2<-list("stomach EMRx1")
ReportText3<-list("stomach biopsy seen pinned on cork","three biopsies")
ReportText<-c(ReportText1, ReportText2,ReportText3)
ReportID Report_Text
1 [1] 4 oesophagus biopsies.
[2] Three EMRs seen
2 [1] stomach EMRx1
3 [1] stomach biopsy seen pinned on cork
[2] three biopsies
所需的输出
ReportID Report_Text Output
1 [1] 4 oesophagus biopsies. oesophagus:biopsies,EMR:
[2] Three EMRs seen
2 [1] stomach EMRx1 stomach:EMR
3 [1] stomach biopsy seen pinned on cork stomach:biopsy,biopsies:
[2] three biopsies
我正在使用的列表:
获取标本类型(例如活检或EMR等)。
HistolType <- function() {
#First standardise the terms
tofind <-
paste(
c(
"Resection","Biopsy","EMR","ESD","bx","biopsy","biopsies"),
collapse = "|"
)
return(tofind)
}
获取标本的位置
LocationList<-function(){
tofind <-
paste(
c(
"Stomach","Antrum","Duodenum","Oesophagus","GOJ"
),
collapse = "|"
)
return(tofind)
}
尝试
我假设方法应该是使用嵌套的lapply
,但是我似乎无法在嵌套的lapply
中应用提取。内在的lapply
似乎并没有分别遍历每个句子并串联每个句子,它只是在末尾串联
lapply(SelfOGD_Dunn2$Macroscopy, function (x)
lapply(x, function(y) paste(
str_extract_all(tolower(y),tolower(LocationList())),":",
str_extract_all(tolower(y),tolower(HistolType())))))
实际输出
ReportID Report_Text Output
1 [1] 4 oesophagus biopsies. "c(\"oesophagus\" : c(\"EMR\", \"bx\")"
[2] Three EMRs seen
2 [1] stomach EMRx1 stomach : EMR
3 [1] stomach biopsy seen pinned on cork "c(\"stomach\" : c(\"biopsy\", \"biopsies\")"
[2] three biopsies
我想一种替代方法是分别提取每个列表以及找到该单词的句子的索引,然后根据索引合并?如果有人知道如何做这件事,我很想知道。
答案 0 :(得分:1)
使用嵌套的lapply
,您需要collapse
从内部列表中输出列表项:
lapply(ReportText, function (x)
paste( lapply(x, function(y)
paste(
str_extract_all(tolower(y),tolower(LocationList()), simplify = T),":",
str_extract_all(tolower(y),tolower(HistolType()), simplify = T))
),
collapse = ","
)
)
#[[1]]
#[1] "oesophagus : biopsies, : emr"
#
#[[2]]
#[1] "stomach : emr"
#
#[[3]]
#[1] "stomach : biopsy"
#
#[[4]]
#[1] " : biopsies"
答案 1 :(得分:1)
由于这些元素是从相应的paste
元素中list
(str_extract_all
返回了list
输出),我们可以使用Map
lapply(SelfOGD_Dunn2$Macroscopy, function (x)
lapply(x, function(y)
Map(paste, str_extract_all(tolower(y),tolower(LocationList())),
str_extract_all(tolower(y),tolower(HistolType())),
MoreArgs = list(sep=":"))))