이유는 모르겠으나 dplyr에서 top_n이 안되는 경우가 있다. 검색을 해보면 DB 기반의 자료에서 이런 성향이 있는 것 같다. 전통적인 방법인 head를 이용하면 우선을 급한 불을 끌 수 있다.
Category: R
-
Shiny에서 ggplot 사용
output$x2 = renderPlot({ dat = get_data() if (input$para == "rr"){ p = ggplot(data=dd) + ... if (input$trend == "y") {p = p + geom_smooth()} plot(p) } })
조금만 shiny를 쓸 수 있으면 바로 알게 되는 것 중의 하나일 것이다. 별다른 조건이 없다면 renderPlot에서 ggplot을 그냥 입력해도 그래프가 출력이 된다. 그런데 이상하게도 조건을 붙이면 빈 화면이 출력된다. 우연하게도 해결한 방법은 전통적인 ggplot 코딩 안내문처럼 ggplot을 특정 변수(이 경우에는 p)에 받고, 이를 출력하도록 하는 것이다.
-
RxNorm 매핑하기
한국의약품안전관리원에서 주관하는 MOA-CDM에 참여하고 있다. 약물에 대한 concept_id는 RxNorm 이나 RxNorm Extension 으로 해야 한다고 한다. EDI에서 ATC로 변환하는 것은 심평원에서 정기적으로 제공하는 파일이 있어서 어렵지 않은데 RxNorm으로 하려면 상당히 난감하다. 의약품안전관리원에서 일부 EDI 코드에 대한 concept_id 매핑 테이블은 제공하지만, 반수 이하만이 가능할 뿐이다. 그래서 RxNorm 으로 매핑을 진행하기로 했다. 유지 비용을 받으니 일을 해야 한다. ㅠ
처음에는 아무런 concept_id를 하고 있었는데 확인해 봤더니 class를 ‘Clinical Drug’로 해야 한다고 한다. 이게 골 때리는 부분이다. 정리하면 다음과 같다.
- 우선 약물 처방 코드로는 무슨 종류의 약물인지 알기가 매우 어렵다.
- EDI에서 RxNorm 매핑에 대한 자료는 없다.
이 2가지 부분은 난감한 부분이지만 좀 편하게 해결하기 위한 방법이 있다.
- 그래도 다행인점은 약물 이름에 대한 정보가 있다는 점이다.
- 약물 이름이 성분명에 가까우면 ‘Clinical Drug’ class에서 검색이 되는 경우가 있다.
- 약물 이름으로 검색을 하면 ‘Branded Drug Comp’ class 에서 해당 내용을 찾을 수 있다. 약물 이름은 끝부분에 [약물이름] 형식으로 되어 있다.
- 그리고 앞 부분에는 성분명, 용량이 제시된다. 이 다음이 중요한데 성분명, 용량이 제시되는 순서를 그대로 다시 concept_name에서 검색을 하면 ‘Clinical Drug’ class에 대부분 전방 일치로 정보가 있다는 것이다. 보통 추가되는 정보는 투여 경로와 제형으로 이 정보를 이용하면 추가로 확인할 수 있다.
말로 하면 어려우니 캡쳐 화면을 직접 보면 이해가 쉽다.
이 것을 적당히 함수로 구현해서 작업을 들어가면 예전보다 훨씬 더 빠른 속도로 진행할 수 있다.
-
R에서 PostgreSQL로 INSERT 하기
사실 이 내용은 별도의 포스트를 개설할 필요는 없을 것 같기도 하지만, 명령어가 직관적이지 않기 때문에 작성하는 것이다. 나중에 깜빡할 수도 있을 것 같다.
보통 R에서는 DB에 SQL로 질의한 결과를 받아와서 분석을 하는 것이 일반적이다. 그렇기 때문에 이럴 경우에는 dbGetQuery()를 이용한다.
그렇다면, INSERT 와 같이 DB를 수정하는 쿼리를 실행하여야 하는 경우라면 어떻게 해야할까?
dbSendQuery() 명령어가 있지 않을까 싶은 생각이 들것이다. 물론 해당 명령어는 있지만, 이건 정말로 Query를 보낸다라는 의미이다. Commit 하기 전과 같은 형태인 것 같다.
원하는 목적을 위해서는 dbGetQuery() 실행할 때에 INSERT 쿼리를 실행하도록 구문을 작성하면 된다.
> sql=paste0("INSERT INTO TABLE (columns) VALUES (values) > dbGetQuery(con, sql)