R의 문자열 처리 및 비교


문자열 길이 알아내기

nchar

문자열 연결 하기

paste("Everybody", "loves", "you.")

비칸을 이용해서 합쳐지며, 다른 문자를 쓰고 싶으면 seq="" 옵션을 이용 한다.

하위 문자열 추출 하기

substr(string,start,end)

string에서 strat에서 시작하고 end에서 끝나는 문자열을 추출 한다.

구분자료 문차열 추출

strsplit(문자열, 구분자)
반환값은 리스트이고
각각의 리스트 원소들은 백터이다.
이렇게 두개의 수준으로 된 구조가 필요한 이유는 
첫 인자가 문자열로 된 백터일 수 있기 때문이다.
각 문자열은 자신의 하위 문자열들(백터)로 분할 된다.
그리고 나서 이 벡터들이 리스트로 반환되는 것이다.

> path <- "/home/mike/data/trials.csv"
> strsplit(path,"/")
[[1]]
[1] ""           "home"       "mike"       "data"       "trials.csv"
> paths <- c("/home/mike/data/trials.csv","/home/mike/data/data.csv","/home/mike/data/error.csv") 
> path <- "/home/mike/data/trials.csv"
> strsplit(paths,"/")
[[1]]
[1] ""           "home"       "mike"       "data"       "trials.csv"

[[2]]
[1] ""         "home"     "mike"     "data"     "data.csv"

[[3]]
[1] ""          "home"      "mike"      "data"      "error.csv"

하위 문자열 대체하기

sub(old,new,string)
첫 번째 하위 문자열을 대체한다.

gsub(old,new,string)
모든 하위 문자열을 대체한다.

정규 표현식을 없앨려면 fixed = TRUE 옵션을 사용 한다.

문자열 특수문자 보기

cat

문자열의 모든 쌍별 조합 생성

m <- outer(문자열1, 문자열2, paste, seq="")

문자열 비교하는 함수

가능한 함수는 아래와 같고
grepgreplregexprgregexprregexec

grep을 이용해서 
어떤 패턴의 문자열을 
원하는 문자로 변경하는 방법은 아래와 같다.

#아래와 같은 샘플이 있다고 가정하자.
Sample <- c("BU1", "BU2", "BM1", "BD1", "BU3") 

#grep을 수행 할 경우
> grep("^BU", Sample) 
c(1,2,5)

> section <- character(length(Sample)) 
> section[grepl("^BU", Sample)] <- "up" 
> section[grepl("^BM", Sample)] <- "mid" 
> section[grepl("^BD", Sample)] <- "down" 
> section
[1] "up"   "up"   "mid"  "down" "up"

# mapping 방식을 이용한 것도 있다.
# 방법 1
map <- c(BU="up", BM="mid", BD="down") 
section <- unname(map[substring(Sample, 1, 2)]) 
section
[1] "up"   "up"   "mid"  "down" "up" 

# 방법 2
from <- c("BU", "BM", "BD") 
to <- c("up", "mid", "down") 
section <- to[match(substring(Sample,1,2), from)] 
section
[1] "up"   "up"   "mid"  "down" "up"  

IF 와 grep을 혼용해서 사용하는 방법

if(length(grep(x,y))==0)
any(grep(x,y))

반복문을 돌면서 두개의 문자열이 같은지 비교하는 코드

pmatch를 이용한다.

sapply(1:length(singleplace$V1), function(x){

    #pmatch(singleplace$V1[x],multieplace$V1[x])
    pmatch(singleplace$V2[x],multieplace$V2[x])
}
)

기타 Match함수로는 아래의 것들이 있다.

> as.logical(match(x,1,nomatch=FALSE))
[1] FALSE
> 1:10 %in% c(1,3,5,9)
 [1]  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE


+ Recent posts