Bu listedeki benzersiz ilaç sayısını saymaya çalışıyorum.Bazılarının birbirinin eşanlamlıları olduğunda benzersiz öğeleri sayma
my_drugs=c('a', 'b', 'd', 'h', 'q')
Ben bana uyuşturucu eş anlamlılarını verir ama tanımlamalar yalnızca benzersiz ilaçlar için böylece o kurulmamış aşağıdaki sözlük,: bu durumda Yani
dictionary <- read.table(header=TRUE, text="
drug names
a b;c;d;x
x b;c;q
r h;g;f
l m;n
")
, orada 2 Listedeki benzersiz ilaçlar (doğrudan ya da dolaylı olarak a, b, d, q ile eşanlamlıdır). Eş anlamlıların eşanlamlıları eş anlamlı olarak sayılır.
Girişimdeki yaklaşımım, öncelikle sol tarafta yalnızca benzersiz ilaçların bulunduğu bir sözlük yapmaktı. Bunu yapmak için, dictionary $ ilacı, grep in dictionary $ uyuşturucu ve dictionary $ eşanlamlıları arasında dolaşır, bunların birliğini alır ve $ synonyms ilacını değiştirir ve sonra diğer satırları sözlükten silerim.
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)
}
}
Bu (bazı ilaçlar small_df kaybolduğunu) işe yaramadı ve o benim listesindeki benzersiz ilaçların sayısını saymak için benim yeni sözlüğünü kullanılmış olurdu emin değilim olsa bile.
My_drugs'da benzersiz ilaçların sayısını nasıl sayabilirim?
Yardımlarınız için teşekkür ederiz ve bunun daha fazla açıklama gerektirmesi durumunda bana bildirin.
Veri Kümesi Boyutu: my_drugs'da 200 öğe, sözlükte 2000 satır, her ilacın 10-12 eş anlamlısı vardır.
Eş anlamlılarsa, adlar arasındaki bağlantılarla bir ağa/grafiğe bakmayı düşünebilirsiniz. Örneğin https://stackoverflow.com/q/30407769/ – Frank