[사용 함수]

키지명

함수명

설명

 

grep

pattern을 포함하고 있는 단어의 결과값의 위치를 반환

 

grepl

pattern을 포함하고 있는 단어에 대해 T/F 반환

 

nchar

character 개수 반환 ,str_length 와 동일

 

regexpr

문자열에서 문자 위치 찾기

 

gregexpr

문자열에서 문자 위치 찾기(global, 전부)

 

sub

문자열에서 문자 바꾸기

 

gsub

문자열에서 문자 바꾸기(global, 전부)

 

paste0

띄어쓰기 없이 붙이기


[정규표현식(regular expression)]

표현

설명

*

0 or more.

+

1 or more.

?

0 or 1.

.

무엇이든 한 글자를 의미

^

시작 문자 지정 ex) ^[abc] abc중 한 단어 포함한 것으로 시작

[^]

해당 문자를 제외한 모든 것 ex) [^abc] a,b,c 는 빼고

$

끝 문자 지정

[a-z]

알파벳 소문자 중 1

[A-Z]

알파벳 대문자 중 1

[0-9]

모든 숫자 중 1

[a-zA-Z]

모든 알파벳 중 1

[-]

모든 한글 중 1

[^-]

모든 한글을 제외한 모든 것

[:punct:]

punctuation.

[:alpha:]

letters.

[:lower:]

lowercase letters.

[:upper:]

upperclass letters.

[:digit:]

digits

[:xdigit:]

hex digits

[:alnum:]

letters and numbers

[:cntrl:]

control characters.

[:graph:]

letters, numbers, and punctuation.

[:print:]

letters, numbers, punctuation, and whitespace.

[:space:]

space characters (basically equivalent to \s).

[:blank:]

space and tab.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
> # Regular expressions
> 
> bananas <- c("banana""Banana""BANANA")
> 
> # .은 무엇이든 한 글자를 의미함
> x <- c("apple""banana""pear")
> str_extract(x".a.") # .은 무엇이든 한 글자를 의미함
[1] NA    "ban" "ear"
> str_detect("\nX\n"".X.") # 줄바꿈은 포함 안함
[1] FALSE
> str_detect("\nX\n", regex(".X.", dotall = TRUE)) # dotall 은 .이 다음 줄에서도 영향
[1] TRUE
> 
> dot <- "\." # 오류, \가 계속 escape 문자로 남아있기 때문 
Error'\.' is an unrecognized escape in character string starting ""\."
> dot <- "\\."
> dot
[1] "\\."
> writeLines(dot)
\.
> str_extract(c("abc", "a.c", "bef"), "a\\.c")
[1] NA    "a.c" NA   
> str_extract(c("abc", "a.c", "bef"), "a.c") 
[1] "abc" "a.c" NA   
> x <- "a\\b"
> writeLines(x)
a\b
> str_extract(x, "\\\\")
[1] "\\"
> writeLines(str_extract(x, "\\\\")) # 역슬래시 하나를 표현하기 위해 4개 역슬래시 필요함
\
> x <- c("a.b.c.d", "aeb")
> starts_with <- "a.b"
> str_detect(x, paste0("^", starts_with)) # paste0 띄어쓰기 없이 붙이기 
[1] TRUE TRUE
> str_detect(x, paste0("^\\Q", starts_with, "\\E")) # ^\\Q" "\\E" 사이에 있는 패턴 정확히 만족하는 것만 
[1]  TRUE FALSE
cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
> # \\d digit \\D 숫자 빼고
> # \\s Space \\S 공백 빼고
> # \\w word  \\W 글자 빼고
> str_extract_all("1 + 2 = 3""\\d+")[[1]] # +는 1회 이상 , 숫자만 뽑아내기
[1"1" "2" "3"
> str_extract_all("1 + 2 = 3""\\D+")[[1]] 
[1" + " " = "
> 
> (text <- "Some \t badly\n\t\tspaced \f text")
[1"Some \t badly\n\t\tspaced \f text"
> str_replace_all(text"\\s+"" ") # 여러개 띄어져있는 것을 한 칸으로 바꿔줌
[1"Some badly spaced text"
> 
> str_extract_all("Don't eat that!""\\w+")[[1]]
[1"Don"  "t"    "eat"  "that"
> str_split("Don't eat that!""\\W")[[1]] # 글자가 아닌 것 기준으로 split 
[1"Don"  "t"    "eat"  "that" ""    
> 
> # 구분
> # ^[abc] abc 중 한 단어 포함한 것으로 시작하는 것
> # [^abc] a,b,c 는 빼고 
> 
> # 실제 사용시에는 [] 한번 더 써야함 [[:digit]]
> # [:punct:]  : punctuation.
> # [:alpha:]  : letters.
> # [:lower:]  : lowercase letters.
> # [:upper:]  : upperclass letters.
> # [:digit:]  : digits.
> # [:xdigit:] : hex digits.
> # [:alnum:]  : letters and numbers.
> # [:cntrl:]  : control characters.
> # [:graph:]  : letters, numbers, and punctuation.
> # [:print:]  : letters, numbers, punctuation, and whitespace.
> # [:space:]  : space characters (basically equivalent to \s).
> # [:blank:]  : space and tab.
> 
> # Repetition
> # ?: 0 or 1.
> # +1 or more.
> # *0 or more.
> 
> x <- "1888 is the longest year in Roman numerals: MDCCCCCLXXXVIII"
> str_extract(x"CC?")
[1"CC"
> str_extract(x"CC+")
[1"CCCCC"
> str_extract(x'C[LX]+')
[1"CLXXX"
cs



[정규 표현식 관련 함수]

[grep(), grepl() 함수]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
> # grep(), grepl() 함수
> # grep (globally search a regular expression & print)
> char1 <- c('apple','Apple','APPLE','banana','grape')
> grep('pp',char1) # pattern을 포함하고 있는 단어의 결과값의 위치를 반환 
[11 2
> grepl('pp',char1) # logical 
[1]  TRUE  TRUE FALSE FALSE FALSE
> grep('pp',char1,value=T) # pattern을 포함하고 있는 문자열 반환 
[1"apple" "Apple"
> 
> # grep()함수에 여러 패턴 사용하기
> char2 <- c('apple','banana')
> grep(char2,char1)  #패턴을 2개 이상 주면 첫 번째 패턴만 사용
[11
Warning message:
In grep(char2, char1) :
  argument 'pattern' has length > 1 and only the first element will be used
> paste(char2,collapse='|')
[1"apple|banana"
> grep(paste(char2,collapse='|'),char1,value=T) # 여러 패턴을 사용하는 방법 or로 연결 
[1"apple"  "banana"
> grep("apple|banana",char1,value=T) # 여러 패턴을 사용하는 방법 or로 연결 
[1"apple"  "banana"
> 
> grep('^A',char1,value=T)  #^을 사용하여 대문자 'A' 로 시작하는 단어 찾기 
[1"Apple" "APPLE"
> grep('e$',char1,value=T)  #$을 사용하여 소문자 'e' 로 끝나는 단어 찾기
[1"apple" "Apple" "grape"
> 
> char3 <- c('grape1','apple1','apple','orange','Apple','grape0')
> grep('ap',char3,value=T)  #ap 가 포함된 단어 찾기
[1"grape1" "apple1" "apple"  "grape0"
> grep('[1-9]',char3,value=T)  #1~9사이숫자가 포함된 단어 찾기 
[1"grape1" "apple1"
> grep('[0-9]',char3,value=T)  #모든숫자중 어느 것이 포함된 단어 찾기 
[1"grape1" "apple1" "grape0"
> 
> grep('[[:upper:]]',char3,value=T)  #대문자가 포함된 단어 찾기
[1"Apple"
> grep('[A-Z]',char3,value=T)  #대문자가 포함된 단어 찾기
[1"Apple"
> grep('[A-z]',char3,value=T)  #영어가 포함된 모든 단어 찾기 small z 
[1"grape1" "apple1" "apple"  "orange" "Apple"  "grape0"
> # 모든 한글은 [ㄱ-힣] or [가-힣]
cs


[nchar() 함수]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
> # nchar() 함수
> # character 개수 반환
> nchar(char1) 
[15 5 5 6 5
> nchar('James Seo')
[19
> nchar('서진수')
[13
> str_length(char1)
[15 5 5 6 5
> str_length('James Seo')
[19
> str_length('서진수')
[13
cs


[Escape]

1
2
3
4
5
6
> # Escape
> # 약속된 언어를 지우는 역할 \
> paste('I','\'m','Hungry')  #특수문자가 있을 경우 Escape character "\" 주의
[1] "'m Hungry"
> paste("I'm","Hungry")
[1] "I'm Hungry"
cs

[regexpr(), gregexpr() 함수]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
> # regexpr(), gregexpr()
> # 문자열에서 문자 위치 찾기 
> grep('-','010-8706-4712')  # grep으로는 위치를 찾을 수 없음.
[11
> regexpr('-','010-8706-4712')  # 처음 나오는 '-' 문자 위치 찾기 
[14
attr(,"match.length")
[11
attr(,"index.type")
[1"chars"
attr(,"useBytes")
[1] TRUE
> gregexpr('-','010-8706-4712')  # 나오는 '-' 문자 위치 모두 찾기 , g => global
[[1]]
[14 9
attr(,"match.length")
[11 1
attr(,"index.type")
[1"chars"
attr(,"useBytes")
[1] TRUE
cs


[sub(), gsub() 함수]

1
2
3
4
5
6
> # sub(), gsub()
> # 문자열에서 문자 바꾸기
> sub("p","*","apple") # substitute 대체하다 
[1"a*ple"
> gsub("p","*","apple") # global
[1"a**le"
cs

출처 - 경영프로그래밍 강의 자료 (양성병 교수님)


'IT,인터넷 관련 학습 > R언어 학습' 카테고리의 다른 글

[R] stringr 패키지  (0) 2019.05.12
[R] dplyr 패키지  (0) 2019.05.12
[R] 함수 II  (0) 2019.05.12
[R] 함수 I  (0) 2019.05.12
[R] 데이터 입력 및 출력  (0) 2019.05.12

+ Recent posts