May, 2018
paste
함수paste("감자로","만든","감자칩", sep='-')
## [1] "감자로-만든-감자칩"
paste("감자로","만든","감자칩", sep='')
## [1] "감자로만든감자칩"
paste("감자로","만든","감자칩")
## [1] "감자로 만든 감자칩"
paste
함수paste(c("감자로 만든","고구마로 만든"), c("감자칩", "고구마칩"), sep=' ')
## [1] "감자로 만든 감자칩" "고구마로 만든 고구마칩"
paste0(1:12, c("st", "nd", "rd", rep("th", 9)))
## [1] "1st" "2nd" "3rd" "4th" "5th" "6th" "7th" "8th" "9th" "10th" ## [11] "11th" "12th"
paste
함수paste0(1:12, collapse = "-")
## [1] "1-2-3-4-5-6-7-8-9-10-11-12"
paste(1:4,5:8, sep = ';')
## [1] "1;5" "2;6" "3;7" "4;8"
paste(1:4,5:8, sep = ';', collapse = '-')
## [1] "1;5-2;6-3;7-4;8"
grep
함수grep("pole", c("Equator", "North Pole", "South pole", "poles"))
## [1] 3 4
nchar
함수nchar(c("South Pole", "한글 문자열", NA))
## [1] 10 6 NA
substr
함수substr("Equator", start=2, stop=4)
## [1] "qua"
substr("한글 문자열 추출", start=2,stop=4)
## [1] "글 문"
substring("한글 문자열 추출", first=2)
## [1] "글 문자열 추출"
substr
함수문자열 내에서 위치를 참조하여 문자열을 반환하는 함수
참고 substr("한글 문자열 추출", start=2)
은 실행되지 않는다.
strsplit
함수strsplit("6-16-2011", split = '-')
## [[1]] ## [1] "6" "16" "2011"
strsplit("6*16*2011", split = '*')
## [[1]] ## [1] "6" "*" "1" "6" "*" "2" "0" "1" "1"
strsplit
함수문자열을 지정한 문자로 분리시켜주는 함수
여기서 *
기호는 모든 문자를 의미한다. *
를 문자 하나로 보고 싶은 경우 다음과 같은 두 가지 방법을 사용할 수 있다.
strsplit("6*16*2011", split = '*', fixed = TRUE)
## [[1]] ## [1] "6" "16" "2011"
strsplit("6*16*2011", split = '\\*')
## [[1]] ## [1] "6" "16" "2011"
strsplit
함수. $ ^ { [ ( | ) * + ? \
문자들은 패턴으로 표현된 문자열 내에서 하나의 문자의 기능을 하지 못하고 어떤 표현을 만들어 내는 특수기호로 사용된다.\\
기호를 사용한다. 예를 들어 \\*
는 하나의 문자열 *
를 표현하는 것이다.strsplit
함수의 옵션인 fixed = TRUE
는 이스케이프 문자를 허용하지 않겠다는 뜻이다.strsplit
함수문자열을 지정한 문자로 분리시켜주는 함수
list.files
함수를 이용하여 어떤 폴더내의 파일 이름을 읽고 파일의 이름과 확장자를 분리해 보아라.
regexpr
함수regexpr("감자", "맛있는 감자칩")
## [1] 5 ## attr(,"match.length") ## [1] 2
regexpr
함수문자열내에서 지정한 패턴(문자)과 처음으로 일치한 위치를 알려주는 함수
attr
함수를 이용해 regexpr
결과 값의 attribute 값을 확인할 수 있다.
a <- regexpr("감자", "맛있는 감자칩") attr(a, 'match.length')
## [1] 2
attr(a, 'useBytes')
## NULL
gregexpr
함수문자열내에서 지정한 패턴(문자)과 일치한 모든 위치를 알려주는 함수
출력값이 list
자료형이다.
역시 attr
함수를 이용해 gregexpr
결과 값의 attribute 값을 확인할 수 있다.
gregexpr
함수a <- gregexpr("감자", "머리를 감자마자 감자칩을 먹었다.") a
## [[1]] ## [1] 5 10 ## attr(,"match.length") ## [1] 2 2
attr(a[[1]], 'match.length')
## [1] 2 2
gsub
함수gsub(pattern = "감자", replacement='고구마', x= "머리를 감자마자 감자칩을 먹었다.")
## [1] "머리를 고구마마자 고구마칩을 먹었다."
gsub(pattern = "<br>", replacement='', x= "머리를 감자마자 <br>감자칩을 먹었다.")
## [1] "머리를 감자마자 감자칩을 먹었다."
|
를 이용해 아래와 같이 적용할 수 있다.()
를 사용한다.strsplit('감자, 고구마, 양파 그리고 파이어볼', split ='(,)|(그리고)')
## [[1]] ## [1] "감자" " 고구마" " 양파 " " 파이어볼"
~
로 시작하는 문자열^
를 사용한다.grep(pattern = '^(감자)', x = '감자는 고구마를 좋아해')
## [1] 1
grep(pattern = '^(감자)', x = '고구마는 감자를 안 좋아해')
## integer(0)
~
로 끝나는 문자열@
를 사용한다.grep(pattern = '(좋아해)$', x = '감자는 고구마를 좋아해')
## [1] 1
grep(pattern = '(좋아해)$', x = '고구마는 감자를 안 좋아해')
## [1] 1
[]
를 사용한다.gregexpr(pattern = '[아자차카]', text = '고구마는 감자를 안 좋아해')
## [[1]] ## [1] 7 13 ## attr(,"match.length") ## [1] 1 1
gregexpr(pattern = '[(사과)(감자)(양파)]', text = '고구마는 감자를 안 좋아해')
## [[1]] ## [1] 6 7 ## attr(,"match.length") ## [1] 1 1
gregexpr(pattern = '^[(사과)(감자)(양파)]', text = '고구마는 감자를 안 좋아해')
## [[1]] ## [1] -1 ## attr(,"match.length") ## [1] -1
[^]
를 사용한다. (bracket 안쪽에 hat과 바깥쪽의 hat을 구별하여라.)grep(pattern = '^[^(사과)(감자)(양파)]', x = '감자는 고구마를 좋아해')
## integer(0)
[a-z]
알파벳 소문자 이외의 문자 중 아무것이나 1개[A-Z]
알파벳 대문자 이외의 문자 중 아무것이나 1개[0-9]
숫자 이외의 문자 중 아무것이나 1개[a-zA-Z]
알파벳 소문자나 대문자 중 아무것이나 1개[가-힣]
한글중에 아무거나 1개[^가-힣]
[]
[:alpha:] 알파벳 문자
[:lower:] 소문자 알파벳 문자
[:upper:] 대문자 알파벳 문자
[:digit:] 숫자
[:alnum:] 알파벳/숫자
[:space:] 출력되지 않는 공백 문자(예: carriage return, newline, vertical tab, form feed 등
[:punct:] 구두점 기호
[:cntrl:] (출력되지 않는) 컨트롤 문자
{from,to}
를 이용하여 생성. 바로 앞 문자에 대한 패턴임을 주의!o{2,4}
는 문자 o
가 2번에서 4번까지 반복되는 패턴[a-z]{3,6}
영어 소문자가 3번에서 6번까지 반복되는 패턴{5}
는 5번 {5,}
5번 이상 반복을 뜻함.^ab{2,3}
: 시작은 a
로 시작하고 다음 b
가 2번에서 3번까지 반복되는 패턴grep(pattern = '^ab{2,3}', x = 'ab') grep(pattern = '^ab{2,3}', x = 'abab') grep(pattern = '^ab{2,3}', x = 'abbb') grep(pattern = '^(ab){2,3}', x = 'abab')
{,}
*
: {0,}
+
: {1,}
?
: {0,1}
.
: 어떠한 문자라도 1개^[1-9][0-9]*$
^[1-9]
처음은 1에서 9로 시작하고[0-9]*
그 다음은 숫자들이 올 수도 있고 반복될 수도 있는데$
그것으로 끝나는 패턴^[1-9][0-9]*$
^[1-9]
처음은 1에서 9로 시작하고[0-9]*
그 다음은 숫자들이 올 수도 있고 반복될 수도 있는데$
그것으로 끝나는 패턴^(0|([1-9][0-9]*))$
^()$
괄호 안에 있는 문자열로 시작해서 끝나는 패턴0|()
0이거나 괄호안에 문자열^[0-9]+(\\.[0-9]{1,2})?$
^[0-9]+
숫자가 없거나 혹은 1번이상 반복으로 시작하는 문자열()?
괄호안의 문자열이 없거나 한번 반복되는 문자열\\.[0-9]{1,2}
.
으로 시작해서 숫자가 1번에서 두번까지 반복되는 문자열^[_a-z0-9-]+(\\.[_a-z0-9-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*$
jj-.__.jeon@gmail.kr.com
은 생성된 패턴에 포함되나?jj,jeon@gmail.com
은 생성된 패턴에 포함되나?if(!require(stringr)){install.packages("stringr"); library(stringr)}
## Loading required package: stringr
hw <- "Hadley Wickham" str_sub(hw, 1, 6)
## [1] "Hadley"
str_sub(hw, -5)
## [1] "ckham"
str_sub(hw, -5, -2)
## [1] "ckha"
fruits <- c("apples and oranges and pears and bananas", "pineapples and mangos and guavas") str_split(fruits, " and ")
## [[1]] ## [1] "apples" "oranges" "pears" "bananas" ## ## [[2]] ## [1] "pineapples" "mangos" "guavas"
str_split(fruits, " and ", n = 2)
## [[1]] ## [1] "apples" "oranges and pears and bananas" ## ## [[2]] ## [1] "pineapples" "mangos and guavas"
str_split_fixed(fruits, " and ", 4)
## [,1] [,2] [,3] [,4] ## [1,] "apples" "oranges" "pears" "bananas" ## [2,] "pineapples" "mangos" "guavas" ""
fruit <- c("apple", "banana", "pear", "pinapple") str_detect(fruit, "^a")
## [1] TRUE FALSE FALSE FALSE
str_count(fruit, c("a", "b", "p", "p"))
## [1] 1 1 1 3
str_locate(fruit, "e")
## start end ## [1,] 5 5 ## [2,] NA NA ## [3,] 2 2 ## [4,] 8 8
shopping_list <- c("apples x4", "flour", "sugar", "milk x2") str_extract(shopping_list, "\\d")
## [1] "4" NA NA "2"
fruits <- c("one apple", "two pears", "three bananas") str_replace(fruits, "[aeiou]", "-")
## [1] "-ne apple" "tw- pears" "thr-e bananas"