2012-01-17 3 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) 

I lapply는 다음과 언 스택 (목록은 페이스트) 등의 기능을 사용하려고 갖지만 각리스트의 요소를 붙여 아니다. 나는 또한 재구성을 시도했으나 첫 번째 또는 두 번째 버전의 설명을 차별화 할 수있는 범주 변수가 없거나 경우에 따라서는 세 번째 버전을 구분할 수있는 카테고리 변수가 없었습니다. 정말 짜증나는 부분은 몇 달 또는 몇 년 전에 비슷한 문제가 있었고 누군가 stackoverflow 또는 r-help 중 하나를 도왔고 나를 찾지 못하는 삶을 살아 왔습니다.

근본적인 문제는 내가 내 앞에 스프레드 시트가 있다고 상상해보십시오. 인접한 열에 동일한 CPT 코드가있는 두 개 또는 세 개의 설명 셀을 세로로 병합 (붙여 넣기)해야합니다.

이 문제에 대한 해결책을 찾으려면 어떤 전문적 유행어를 사용해야합니까? 도움을 주셔서 대단히 감사합니다.

+0

을 제공

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

대신 세미콜론의 쉼표로 OK 경우, 당신은 단지'집계 할 수 있습니다 (설명을 ~ CPT, cpt.desc, toString)'. 'aggregate'를 여러분이 좋아하는 집계 도구로 바꾸고, 아래의 해답에 설명 된대로'toString'을'paste'로 대체하십시오. – A5C1D2H2I1M1N2O1R2T1

답변

1

다음은 plyr을 사용하는 접근 방식입니다.

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

나는 이미 많은 것을 사용하는 패키지를 사용하고 따르기 쉬운 한 줄의 코드만으로 원하는 모든 데이터 프레임을 출력하기 때문에이 대답을 좋아합니다. – Farrel

+0

'paste '함수의', collapse = ";"인수는 선택 사항이라고 생각했습니다. 위의 구문에서 왜 필요합니까? 구문없이 구문을 실행 해보십시오. 제대로 작동하지 않습니다. 또한 data.table,'cpt.desc <- data.table (cpt, description)'을 사용한다면'cpt.desc [, list (desciption.wanted = paste (description, collapse = ";")) , by = cpt]' – Farrel

+0

'collapse' 인자는 선택 사항입니다.'paste()'함수를 사용하기 위해 지정하지 않아도됩니다. 그러나 당신이하고 싶은 것을하기 위해서는 그것이 필요합니다. 'paste()'는 두 가지 일을합니다. 인수로서 (잠재적으로 다중 인) 벡터가 주어지면, 요소별로 요소를 하나의 문자 벡터 (각 벡터로부터의 기여도가 'sep'로 분리됨)로 결합합니다. 'collapse'가 지정되지 않으면이 벡터가 반환됩니다. 'collapse'가 지정되면 붙여 넣기 된 벡터의 요소는 그 자체가 연결되어'collapse'로 분리되고 단일 문자열이 반환됩니다. –

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