정보

    • 업무명     : R을 이용한 통계 분석 및 데이터 시각화 : 문자열

    • 작성자     : 박진만

    • 작성일     : 2020-03-26

    • 설   명      :

    • 수정이력 :

     

     내용

    [개요]

    • R은 통계 분석 및 시각화 등의 기능을 갖춘 프로그래밍 언어 내지 통계 분석 환경입니다. 

    • 통계 분석 기능으로 통계 검정, 선형 회귀 분석, 시계열 데이터 분석, 클러스터링 등을 지원하고 있습니다.

    • 또한 최신 논문에서 발표된 같은 새로운 기술도 R로 구현되는 경우가 많습니다.

    • 특히 시각화 기능으로 히스토그램, 막대 그래프, 선 그래프, 산포도, 나무 모양 그림이나 히트맵 등 기본적인 그래프가 기본으로 지원하고 있습니다.

    • 또한 ggplot2 등의 패키지를 사용하여 더 높은 수준의 그림을 가시화할 수 있습니다.

     

     

    [특징]

    • 데이터를 이해하기 위해서 통계 분석 및 데이터 시각화가 요구되며 이 프로그램은 이러한 목적을 달성하기 위한 소프트웨어

       

    [기능]

    • 데이터형 소개

     

    [활용 자료]

    • 없음

     

    [자료 처리 방안 및 활용 분석 기법]

    • 없음

     

    [사용법]

    • 소스 코드 예시 참조

     

    [사용 OS]

    • Windows 10

     

    [사용 언어]

    • R v3.6.2

    • R Studio v1.2.5033

     

     소스 코드

    • R은 계산을 메인으로하는 통계 분석 프로그램이지만, 문자열 자르기 및 대체 등의 문자열 처리가 가능한 함수도 많이 포함하고 있다.

    • 즉 문자열의 분할과 정규식을 이용한 패턴 매칭 등을 할 수있다.

     

    [문자열 패턴 검색]  grep, regexpr

    • grep는 일치 여부를 반환하며 regexpr는 매치한 위치와 일치하는 길이 등을 반환해 준다.

    • grep와 regexpr패턴에서 정규 표현식을 사용할 수 있다.

    files <- c("NM20001.gb", "NN30012.gb", "NM20111.fa", "NM20121.fa")
    
    #「.gb」로 끝나는 요소를 검색
    grep("\\.gb$", files)      # files 벡터의 1과 2의 요소가 .gb로 끝나고 있음
    ## [1] 1 2
    
    #「.sam」로 끝나는 요소를 검색
    grep("\\.sam$", files)     # files 벡터는 .sam로 끝나는 요소가 없음
    ## integer(0)
    
    
    seq <- c("GATGC", "ATATA", "CGCGC")
    
    #ATG위치를 검색
    regexpr("ATG", seq)
    ## [1]  2 -1 -1               #일치하는 위치
    attr(,"match.length")      
    ## [1]  3 -1 -1               #매치 한 문자열의 길이
    attr(,"useBytes")
    
    
    #위치를 검색
    regexpr("GC", seq)
    ## [1]  4 -1  2
    attr(,"match.length")
    ## [1]  2 -1  2
    attr(,"useBytes")
    ## [1] TRUE

     

    [문자열 일치 검색] match, charmatch

    • match함수는 문자열의 일치 여부를 검사한다. 제 1 인수에는 패턴을 지정하고 두 번째 인수는 대상 문자열을 지정한다. 

    • 또한 패턴은 복수로 지정할 수 있다. charmatch는 부분 문자열의 일치를 검색한다. 

    • 사용법은 match과 마찬가지로 패턴과 대상 문자열을 지정한다.

    seqA <- c("ATG", "GC", "AT", "GCGC")
    seqB <- c("CGCA", "GC", "AT", "AT", "ATA")
    
    #seqA와 완전히 일치하는 요소를 찾는다
    match("GC", seqA)  #match의 경우는 처음부터 끝까지 같으면 일치하는 경우를 찾는다.
    ## [1] 2
    grep("GC", seqA)   #grep의 경우 GC가 포함되어 있는 경우를 찾는다.
    ## [1] 2 4
    grep("^GC$", seqA) #grep의 정규 표현식을 이용하여 match와 같은 기능을 실현할 수 있다.
    ## [1] 2
    
    
    #seqA에 나타내는 패턴 중 seqB 중 어떤 요소가 서로 완전히 일치하는지 검색
    match(seqA, seqB)
    ## [1] NA  2  3 NA
    
    
    #seqA에 나타내는 패턴 중 seqB 어떤 요소가 부분적으로 일치하는기 검색
    charmatch(seqA, seqB)
    ## [1] NA  2  0 NA
    

     

    [문자열 자르기] substr, substring

    • 문자열에서 일부만 잘라내는 경우 substr와 substring를 이용한다.

    • 양자는 거의 동일한 명령어이며, 제 1 인수는 대상 문자열, 두번째 파라미터는 자를 시작 위치, 제 3 인수는 자를 종료 위치를 지정한다. (첫 번째 문자의 위치는 다른 프로그래밍 언어에서 "0"인 반면, R은 "1"이다.)

    dna <- c("AAGCT", "TTAAA", "CCTAT")
    
    substr(dna, 2, 3)
    ## [1] "AG" "TA" "CT"
    
    substring(dna, 2, 3)
    ## [1] "AG" "TA" "CT"

     

     

    [문자열 치환] sub, gsub, chartr

    • 문자열 치환을 수행하는 함수는 sub gsub chartr 등이있다.

    • gsub는 조건에 맞는 것을 모두 바꾸는 반면, sub조건에 맞는 것들 중 첫번째만을 선택하여 치환하게 된다. 

    • 또한

       chartr은 한 글자씩 치환하는 함수이다.아래의 예시를 보자

    dna <- c("AAGCAT", "TAATAA", "CCTAT")
    
    sub("TA", "ta", dna)
    ## [1] "AAGCAT" "taATAA" "CCtaT" 
    
    gsub("TA", "ta", dna)
    ## [1] "AAGCAT" "taAtaA" "CCtaT"
    
    # dna =~ tr/ACGT/TGCA/ 
    chartr("ACGT", "TGCA", dna)
    ## [1] "TTCGTA" "ATTATT" "GGATA"

     

     

    [문자열 결합] paste, paste0

    • paste결합시키고 싶은 문자열 (벡터)를 할당하고 결합 문자 sep또는 collapse를 지정하여 문자열의 결합을한다. 

    • 결합 문자를 넣지 경우 sep = "" 처럼 지정하거나 paste0를 사용한다.

    rna <- c("ACAACACGATGT" , "CACANCGATC" , "NNCTCGCTAGC")
    tail <- c("AAAAAA")
    
    paste(rna , tail , sep = "_")
    ## [1] "ACAACACGATGT_AAAAAA" "CACANCGATC_AAAAAA"   "NNCTCGCTAGC_AAAAAA"
    
    paste(rna , tail , sep = "-", collappse = "_")
    ## [1] "ACAACACGATGT-AAAAAA-_" "CACANCGATC-AAAAAA-_"   "NNCTCGCTAGC-AAAAAA-_"
    
    
    
    x <- c("AAA", "BBB", "CCC")
    y <- c("XXX", "YYY")
    
    paste(x, y, sep = "-")
    ## [1] "AAA-XXX" "BBB-YYY" "CCC-XXX"
    
    paste(x, y, sep = "-", collapse = "=")
    ## [1] "AAA-XXX=BBB-YYY=CCC-XXX"
    paste0("AAA", "BBB", "CCC")
    ## [1] "AAABBBCCC"

     

    [문자열 분할] strsplit

    • strsplit은 정규 표현식을 사용할 수 있다. strsplit 에서 1 번째의 인수는 대상 문자열을, 두 번째 인수 구분자를 지정하고 문자열을 절단한다.

    • 절단 된 문자열은 리스트 형으로 반환된다.

    rna <- c("ACCCGTACGTATCGATC" , "CTTCAAACTGTCAAC" , "ACCACGATGTAGT")
    strsplit(rna , "GT[GC]")
    ##
    ##[[1]]
    ## [1] "ACCCGTACGTATCGATC"
    ##
    ##[[2]]
    ## [1] "CTTCAAACT" "AAC"
    ##
    ##[[3]]
    ## [1] "ACCACGATGTAGT"

     

    [기타 문자열 조작 함수]

    함수 기능
    nchar 문자열의 길이를 조사한다.
    toupper 소문자를 대문자로 변환한다.
    tolower 모든 대문자를 소문자로 변환한다.
    DNA <- c("CCTAGGGAAACCAG" , "TGTCCGGGATACG" , "CCTCAGGGCCTA" , "CGTGGGTACCGT")
    
    #tolower
    dna <- tolower(DNA)
    dna
    ## [1] "cctagggaaaccag" "tgtccgggatacg"  "cctcagggccta"   "cgtgggtaccgt"
    
    #toupper
    DNA <- toupper(dna)
    DNA
    ## [1] "CCTAGGGAAACCAG" "TGTCCGGGATACG"  "CCTCAGGGCCTA"   "CGTGGGTACCGT"
    
    #nchar
    nchar(DNA)
    ## [1] 14 13 12 12

     

     

    • R의 패턴 매칭 함수 grep와 match문자열 치환 함수 sub등의 함수는 정규 표현식에 대응하고 있다. 

    • 정규식에 사용되는 메타 문자는 아래에 나타낸 것과 같다.

    () 여러 문자를 하나의 패턴으로 정리한다.
    [] 클래스입니다. []로 둘러싸인 문자열 중 하나의 문자를 나타낸다.
    $ 후미
    ^ 첫 또한 []에서 사용하면 "그렇지"를 나타낸다.
    ? 직전의 패턴이 0 번 또는 1 번 반복하는 것을 나타낸다.
    * 직전의 패턴이 0 번 이상 반복을 나타낸다.
    + 직전의 패턴이 1 회 이상 반복하는 것을 나타낸다.
    {2,5} 전출 패턴이 2 회 이상 5 회 이하로 반복하는 것을 나타낸다.
    . 단일 문자를 나타냅니다.
    | "또는"을 나타냅니다.
    \ 메타 문자를 이스케이프 할 때 사용한다.

     

    • 정규 표현식의 예시는 아래와 같다.

    # 처음부터 끝까지 알파벳과 숫자로만 표현되는 문자열
    grep("^[[:alnum:]]+$", x)
    
    # ATT 또는 ATC 또는 ACT를 포함한 문자열
    grep("(ATT|ATC|ACT)", x)
    
    # ATT 또는 ATC 또는 ACT로 끝나는 문자열
    grep("(ATT|ATC|ACT)$", x)
    
    # A, C, G, T, U, X만으로 이루어진 문자열
    grep("[^ACGTUX]", x)
    
    # A, C, G, T, U, X 이외에도 문자를 포함하는 문자열
    grep("[^ACGTUX]", x)
    
    # 세린에 나타내는 코돈을 포함하는 문자열 (세린 : UCU, UCC, UCA, UCG, AGU, AGC)
    grep("(UC.|AG[CU])", x)
    
    # # GC가 2 개 이상의 연속하는 패턴을 포함하는 문자열
    grep("(GC){2,}" ,x)
    
    # GC 또는 CG가 2 개 이상의 연속하는 패턴을 포함하는 문자열
    grep("(GC|CG){2,}" ,x)

     

    [다음글]

     

    [R] R을 이용한 통계 분석 및 데이터 시각화 : 결측치

    정보 업무명 : R을 이용한 통계 분석 및 데이터 시각화 : 결측치 작성자 : 박진만 작성일 : 2020-03-26 설 명 : 수정이력 : 내용 [개요] R은 통계 분석 및 시각화 등의 기능을 갖춘 프로그래밍 언어 내지 통계 분..

    shlee1990.tistory.com

     

    [이전글]

     

    [R] R을 이용한 통계 분석 및 데이터 시각화 : 해시 테이블

    정보 업무명 : R을 이용한 통계 분석 및 데이터 시각화 : 해시 테이블 작성자 : 박진만 작성일 : 2020-03-26 설 명 : 수정이력 : 내용 [개요] R은 통계 분석 및 시각화 등의 기능을 갖춘 프로그래밍 언어 내지 통..

    shlee1990.tistory.com

     

     참고 문헌

    [논문]

    • 없음

    [보고서]

    • 없음

    [URL]

    • 없음

     

     문의사항

    [기상학/프로그래밍 언어]

    • sangho.lee.1990@gmail.com

    [해양학/천문학/빅데이터]

    • saimang0804@gmail.com

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    본 블로그는 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기