Вставить (или объединить) два элемента столбца вместе - PullRequest
1 голос
/ 17 января 2012

У меня есть два источника информации о выставлении счетов за клинические процедуры, которые я добавил вместе (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)

Я пытался использовать такие функции, как unstack и затем lapply (list, paste), но это не вставляет элементы каждого списка. Я также попытался изменить форму, но не было категориальной переменной, чтобы различать первую или вторую версию описания или даже в некоторых случаях третью. По-настоящему раздражает то, что у меня была похожая проблема несколько месяцев или лет назад, и кто-то помог мне либо в работе со стеком, либо в r-help, и я всю жизнь не могу ее найти.

Итак, основная проблема в том, представьте, что передо мной электронная таблица. Мне нужно сделать вертикальное слияние (вставка) из двух или, может быть, даже трех ячеек описания, которые имеют одинаковый код CPT в соседнем столбце.

Какие умные слова я должен был использовать, чтобы найти решение этой проблемы. Большое спасибо за вашу помощь.

Ответы [ 2 ]

2 голосов
/ 17 января 2012
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"     
1 голос
/ 18 января 2012

Вот подход, который использует 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
...