我正在尝试计算此列表中唯一药物的数量。
我有以下词典,它提供了药品的同义词,但它没有设置使定义仅适用于唯一的药品:
my_drugs=c('a', 'b', 'd', 'h', 'q')
我有以下词典,它提供了药品的同义词,但它没有设置使定义仅适用于唯一的药品:
dictionary <- read.table(header=TRUE, text="
drug names
a b;c;d;x
x b;c;q
r h;g;f
l m;n
")
在这种情况下,列表中有两种独特的药物(因为a通过直接或间接方式具有同义词b、d、q)。 同义词的同义词算作同义词。
我的尝试方法是首先创建一个只有左侧唯一药物的字典。为此,我将循环遍历dictionary$drug,grep dictionary$drug和dictionary$synonyms,获取它们的并集并替换drug$synonyms,然后从字典中删除其他行。
bigdf=dictionary
small_df=data.frame("drug"=NA,"names"=NA)
for(i in 1:nrow(bigdf)){
search_term=sprintf("*%s*",bigdf$drug[i])
index=grep(search_term,bigdf$names)
list=bigdf$names[index]
list=Reduce(union,list)
list=paste(list, collapse=";")
if(!list==""){
new_row=data.frame("drug"=bigdf$drug[index][1],"names"=list)
small_df=rbind(small_df,new_row)
#small_df
bigdf=bigdf[-index,]
#dim(bigdf)
}
else{
new_row=data.frame("drug"=bigdf$drug[index][1],"names"="alreadycounted")
small_df=rbind(small_df,new_row)
}
}
这种方法行不通(small_df中缺少一些药物),即使可以使用,我也不确定如何使用新字典来计算列表中独特药物的数量。
我该如何统计my_drugs中独特药物的数量?
感谢你的帮助,如果需要进一步解释,请告知。
数据集大小:my_drugs中有200个元素,字典中有2000行,每个药物有10-12个同义词。