一分鐘數(shù)據(jù)清洗: K-Means 聚類的模糊標(biāo)準(zhǔn)化

來自一個師兄的提問:
想做中藥成分復(fù)方藥物分析的K-Means 聚類,如何快速進行模糊標(biāo)準(zhǔn)化?

實現(xiàn)要求:

手頭有270個復(fù)方,然后有118味興趣藥物,想研究復(fù)方中出現(xiàn)興趣藥物的情況。如果復(fù)方的藥物出現(xiàn)在研究的興趣藥物中,則標(biāo)1,否則標(biāo)0。把每個復(fù)方轉(zhuǎn)換成只有“1”和“0”的表格數(shù)據(jù)。

目標(biāo)效果

image.png

參考文獻:劉廣, 孫艷秋. 基于K-Means聚類算法的消渴方劑研究 [J]. 中華中醫(yī)藥學(xué)刊, 2017(1):173-178,共6頁.

怎么辦?

嗯,對于我這種EXCEL并不會用的人來說,最簡單的想法就是自己做個表格,慢慢匹配咯。然后手動根據(jù)匹配結(jié)果,輸入”0“和”1“咯,但是這也絕望了吧,270個方劑,平均有一個方15個藥物,我要核對15×270=4050次,對表格進行118×270=31860次的重復(fù)輸入。
這太難了~

R語言解決方法

當(dāng)一個數(shù)據(jù)處理的操作需要重復(fù)操作3次以上,那么這樣的操作應(yīng)該可以通過編程解決掉它~
幸虧會一點R語言,這個需求實現(xiàn)起來還是比較簡單的,一個for循環(huán)就搞定了~

下面展示下出來步驟~
1.數(shù)據(jù)準(zhǔn)備

處方匯總表×1:


image.png

研究的興趣藥物列表×1
原數(shù)據(jù)有118個,限于截圖這里展示一部分。


image.png
2.寫個循環(huán)解決它
Talk is cheap, so let me show you the codes.
#1.載入需要的包
options(stringsAsFactors = F)
library(tidyverse)
library(openxlsx)
#2.導(dǎo)入處方數(shù)據(jù)
prescription_all <- read.xlsx("處方匯總.xlsx",sheet = 1,colNames =T)
#刪掉第一列,整理下
prescription_all <- prescription_all %>% 
        .[,-1] %>% t() #共270個處方
prescription_all <- as.data.frame(prescription_all )
##3.導(dǎo)入要篩選的藥物
herb_all <- read.xlsx("整理藥物名錄.xlsx",sheet =1,colNames = F) 
herb_all <- herb_all$X1
##4.寫個循環(huán)操作下
output <- list()

for (i in 1:ncol(prescription_all)) {
  print(i)
  output[[i]] <- herb_all%in%na.omit(prescription_all[,i])
  
}
#5.合并并修改名稱
out_data <- do.call(rbind,output)
out_data <- apply(out_data, 2, as.numeric) %>% 
  as.data.frame()
colnames(out_data) <- herb_all
rownames(out_data) <- paste0("處方",1:270)
#####6.驗證
sort(prescription_all$`2` %>% 
  na.omit())

sort(herb_all[out_data[2,]==1])


##7.輸出,收工~
out_data$"處方名" <- rownames(out_data)
out_data <- select(out_data,"處方名",everything())
write.xlsx(out_data,"藥物整理數(shù)據(jù).xlsx")


輸出結(jié)果:

image.png

耗時計算:

image.png

人工跑斷腿,R語言循環(huán)只要1秒鐘~
不知道大家有沒有這樣的需求,拋磚引玉,提供下參考~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 03 聚類算法 - K-means聚類04 聚類算法 - 代碼案例一 - K-means聚類 三、K-Means算...
    白爾摩斯閱讀 7,485評論 0 17
  • 聚類是機器學(xué)習(xí)中一種重要的無監(jiān)督算法,它可以將數(shù)據(jù)點歸結(jié)為一系列特定的組合。理論上歸為一類的數(shù)據(jù)點具有相同的特性,...
    hexg1016閱讀 748評論 0 1
  • 看《認知天性》的起因很簡單,就是知乎某推薦書類高贊回答。第一本就是它,還語重心長的提醒“這本書能解決一個問題:教你...
    硬紙盒玩家閱讀 4,996評論 6 24
  • 西周周厲王時期,殘暴無道,國人對他的政教不滿,于是就有人開始誹謗周厲王。召公知道后,對周厲王說:“百姓快忍受不了您...
    儒者之徒閱讀 426評論 0 2
  • 每晚九點收聽小北的音頻,大概算一下已經(jīng)2年多,這期間無論心情如何都會準(zhǔn)時收聽,因為是她的節(jié)日讓我學(xué)會一個姑娘應(yīng)該如...
    小太陽的碎碎念閱讀 317評論 0 1

友情鏈接更多精彩內(nèi)容