2012-01-17 99 views
1

我有兩個臨牀程序帳單信息來源,我已經加在一起(與rbind)。在每一行中都有一個CPT字段和一個CPT.description字段,用於提供簡要說明。但是,這兩個來源的描述略有不同。我希望能夠將它們結合起來。這樣,如果使用不同的單詞或縮寫,那麼我只需要進行字符串搜索即可找到我要查找的內容。將列的兩個元素粘貼(或合併)在一起

因此,我們來構建一個我能夠生成的數據表的簡化表示。

cpt <- c(23456,23456,10000,44555,44555) 
description <- c("tonsillectomy","tonsillectomy in >12 year old","brain transplant","castration","orchidectomy") 
cpt.desc <- data.frame(cpt,description) 

這就是我想要的。

cpt.wanted <- c(23456,10000,44555) 
description.wanted <- c("tonsillectomy; tonsillectomy in >12 year old","brain transplant","castration; orchidectomy") 
cpt.desc.wanted <- data.frame(cpt.wanted,description.wanted) 

我已經使用的功能,例如拆散,然後lapply(列表,膏)嘗試,但沒有被粘貼每個列表的元素。我也試過重塑,但沒有明確的變量來區分第一版或第二版的描述,甚至在某些情況下還有三分之一。真煩人的部分是幾個月或幾年前我有類似的問題,有人幫助我在計算器上或在r幫助和我的生活我無法找到它。

所以潛在的問題是,想象我有一個電子表格在我面前。我需要在相鄰列中執行兩個或甚至三個具有相同CPT代碼的描述單元的垂直合併(粘貼)。

我應該用什麼流行語來搜索這個問題的解決方案。 非常感謝您的幫助。

+0

如果你是用逗號而不是分號OK,你可以做'彙總(描述〜CPT,cpt.desc,的toString)'。用你最喜歡的聚合工具替換'aggregate',並用'paste'替換'toString',如下面的答案所述。 – A5C1D2H2I1M1N2O1R2T1 2017-12-14 08:49:29

回答

1

這是一種使用plyr的方法。

library("plyr") 
cpt.desc.wanted <- ddply(cpt.desc, .(cpt), summarise, 
    description.wanted = paste(unique(description), collapse="; ")) 

這給

> cpt.desc.wanted 
    cpt       description.wanted 
1 10000        brain transplant 
2 23456 tonsillectomy; tonsillectomy in >12 year old 
3 44555      castration; orchidectomy 
+0

我喜歡這個答案,因爲它使用了一個我已經使用很多的包,並且只需要一行代碼就可以輸出我想要的所有數據幀。 – Farrel 2012-01-18 16:05:30

+0

我認爲''paste''''''''''''''''功能的參數是可選的。爲什麼在上面的語法中有必要?繼續嘗試運行沒有它的語法。它不會正常工作。此外,如果使用data.table,'cpt.desc < - data.table(cpt,description)'必須這樣做'cpt.desc [,list(desciption.wanted = paste(description,collapse =「;」)) ,by = cpt]' – Farrel 2012-01-18 16:33:41

+0

'collapse'參數是可選的,就像你不必指定它能夠使用'paste()'函數一樣。但要做你想做的事情,這是必要的。 'paste()'做兩件事。給定(可能是多個)向量作爲參數,它將它們逐個元素組合成單個字符向量(其中每個向量的貢獻由'sep'分隔)。如果未指定'collapse',則返回該向量。如果指定了'collapse',那麼粘貼在一起的矢量的元素本身連接起來,用'collapse'分開,並返回一個單一的字符串。 – 2012-01-18 19:24:38

2
sapply(sapply(unique(cpt), function(x) grep(x, cpt)), 
         # creates sets of index vectors as a list 
     function(x) paste(description[x], collapse=";")) 
     # ... and this pastes each set of selected items from "description" vector 
[1] "tonsillectomy;tonsillectomy in >12 year old" 
[2] "brain transplant"       
[3] "castration;orchidectomy"  
+0

我喜歡這個答案,因爲它只使用基本功能。 – Farrel 2012-01-18 16:04:44

相關問題