본문 바로가기
Coding/R

R 배워보기-3. 문자열

by Lv. 35 라이츄 2022. 8. 20.

쿡북 분량은 일단 짧다. 

다음것도 짧다. 


grep()

v=c("피카츄","피츄","라이츄","에몽가","따라큐")
w=c("Alticuno","moltres","zapdos","lugia","Ho-oh")

참고로 오늘의 시범조교다. 

grep("따라큐",v)
[1] 5

grep은 문자를 찾아주는 함수. 

grep("alticuno",w)
integer(0)

...인데 대소문자를 가린다. 

grep("alticuno",w,ignore.case=TRUE)
[1] 1

그래서 ignore.case=TRUE를 줘야 대소문자 상관 없이 찾아준다. 

 

^와 $

각각 문자의 시작과 끝을 지정해서 찾아주는 것. 

grep("^피",v)
[1] 1 2
# 시작 문자 지정하기
grep("츄$",v)
[1] 1 2 3
# 끝 문자 지정하기

시작 문자는 ^(문자), 끝 문자는 (문자)$로 지정하면 된다. 

 

글자수 지정하기

grep("..a",w)
[1] 4
grep("..츄",v)
[1] 1 3

각각 a와 츄로 끝나는 세글자 이상인 것을 찾으라는 얘기. R은 결과가 벡터 주소로 나온다. 

 

grepl()

grepl("..츄",v)
[1]  TRUE FALSE  TRUE FALSE FALSE

결과를 찾아주긴 하는데 T, F로 반환한다. 

 

gsub()

> text="힘세고 강한 아침"
> gsub("아침","오후",text)
[1] "힘세고 강한 오후"

엑셀의 찾아바꾸기 같은 기능. sub()은 처음에 나오는 것 하나만, gsub()은 전부 바꿔준다. 

 

paste()

> a="Thunder"
> b="bolt"
> paste(a,b)
[1] "Thunder bolt"

기본적으로는 이렇게 쓴다.

paste(v,w)
[1] "피카츄 Alticuno" "피츄 moltres"    "라이츄 zapdos"   "에몽가 lugia"   
[5] "따라큐 Ho-oh"

벡터도 되긴 된다. (각 벡터의 1번끼리 붙이고 2번끼리 붙이고 이런 식)

paste(a,b,sep="")
[1] "Thunderbolt"
paste(a,b,sep=";")
[1] "Thunder;bolt"

sep=""으로 구분자 옵션도 줄 수 있다. 

paste(v,collapse=",")
[1] "피카츄,피츄,라이츄,에몽가,따라큐"

벡터의 원소들은 이런 식으로 collapse를 사용해야 하고

paste(v,w,sep=";",collapse=", ")
[1] "피카츄;Alticuno, 피츄;moltres, 라이츄;zapdos, 에몽가;lugia, 따라큐;Ho-oh"

두 개 이상의 벡터를 붙일 때 sep=""을 쓰면 안에 있는 원소들을 저걸로 구별해준다. 

 

paste0()

paste0(a,b)
[1] "Thunderbolt"

paste()에서 sep=""인 것과 동일. 

 

sprintf()

파이썬의 format같은 것. 

sprintf("%s",text)
[1] "힘세고 강한 아침"
sprintf("%s은 귀엽다",v)
[1] "피카츄은 귀엽다" "피츄은 귀엽다"   "라이츄은 귀엽다" "에몽가은 귀엽다"
[5] "따라큐은 귀엽다"

따옴표가 없으면 에러난다. 

sprintf("%d,",a)
[1] "1," "2," "3," "4," "5,"
> sprintf("%4d,",a)
[1] "   1," "   2," "   3," "   4," "   5,"
# 여기 공백 4개 추가요
> sprintf("%04d,",a)
[1] "0001," "0002," "0003," "0004," "0005,"
# 공백은 너무 여백의 미니까 0을 붙이죠

앞에 옵션을 줄 수도 있다. (%d는 int)

> sprintf("%f",pi)
[1] "3.141593"
# 이것은 원주율이다. 
> sprintf("%.3f",pi)
[1] "3.142"
# 소수점 아래 세자리만 뽑자. 
> sprintf("%1.0f",pi)
[1] "3"
# 아 소수점 필요없어!!! 
> sprintf("%2.0f",pi)
[1] " 3"
# 앞에 공백이 생겼다. 
> sprintf("%-2.0f",pi)
[1] "3 "
# 뒤에 공백이 생겼다. 
> sprintf("%+2.0f",pi)
[1] "+3"
# 앞에 +가 붙었다. 
> sprintf("%+20f",pi)
[1] "           +3.141593"
> sprintf("%-20f",pi)
[1] "3.141593            "
# +는 앞에 붙는데 -는 또 뒤에 가서 붙는다. 뭘까.

%f는 float. 

> sprintf("%e",sqrt(2))
[1] "1.414214e+00"
> sprintf("%E",sqrt(2))
[1] "1.414214E+00"

%e, %E는 지수형상수. 

> sprintf("%g",sqrt(2))
[1] "1.41421"
> sprintf("%g",1e6 * sqrt(2))
[1] "1.41421e+06"
> sprintf("%.g",1e6 * sqrt(2))
[1] "1e+06"
> sprintf("%.G",1e-6 * sqrt(2))
[1] "1E-06"

넌 뭐냐? 

+%는 %%로 출력한다. 

'Coding > R' 카테고리의 다른 글

R 배워보기-5. 데이터 불러오고 쓰기  (0) 2022.08.20
번외편-R로 미적분 하기  (0) 2022.08.20
R 배워보기-4. 공식  (0) 2022.08.20
R 배워보기-2. Numbers  (0) 2022.08.20
R 배워보기-1. Basics  (0) 2022.08.20

최근댓글

최근글

skin by © 2024 ttutta