2014-09-19 72 views
2

我對R很新,所以請耐心等待我。來自data.frame的獨特單詞列表

我有一個字符向量,列中描述了不一致格式的疾病和診斷關鍵字。示例是:

flu 
fever/feverish 
fever cold 

我正在尋找從中提取所有唯一字的最佳方法。我能想出這麼遠的最佳工藝是給我向量的向量:

[[1]] 
[[1]][[1]] 
[1] "flu" 

[[2]] 
[[2]][[1]] 
[1] "fever" "feverish" 
... 

我做到這一點通過:

split_words <- function(x){ strsplit(x, "[^[:alpha:]]+") } 
lapply(diagnoses, split_words) 

什麼是將此轉換成一個單一的載體,最好的辦法還是單列數據框,以便我可以在此矢量上運行unique並刪除重複項。

R上的最好包做詞幹除去類似的拼寫是什麼,複數等

+0

所有保證小寫?拆分並放棄任何空格或標點符號?你確定'/'或' - '總是無關緊要嗎?怎麼樣*格林巴利綜合症*? – smci 2014-09-19 23:52:40

+0

我用「 - 」和「/」檢查了所有的術語,實際的正則表達式有點複雜。但我想簡化這個問題。在進入這個階段之前,我正在運行tolower和獨特的疾病列表。 – Hans 2014-09-20 00:04:29

回答

7

你可以使用strsplitunlist的所有元素,以獲得向量,unique的獨特元素。

x <- c("flu", "fever/feverish", "fever cold") 
(ul <- unlist(strsplit(x, "\\s+|[[:punct:]]"))) 
# [1] "flu"  "fever" "feverish" "fever" "cold" 
unique(ul) 
# [1] "flu"  "fever" "feverish" "cold" 
+0

拆分有選擇的標點符號。在'[。,;:]上分割''不要在'[ - /]'上分割 – smci 2014-09-20 21:27:33

1
# > df 
#   illness 
#1   flu 
#2 fever/feverish 
#3  fever cold 


udf <- unlist(strsplit(df$illness, "[^[:alnum:]]")) 
# [1] "flu"  "fever" "feverish" "fever" "cold" 

table(udf) 
#udf 
# cold fever feverish  flu 
#  1  2  1  1