쭈쌤
쭈쌤 Hello World

[R] 내장함수

크리에이티브 커먼즈 라이선스 ITPAPER(호쌤,쭈쌤)에 의해 작성된 ≪[R] 내장함수≫은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
이 라이선스의 범위 이외의 이용허락을 얻기 위해서는 leekh4232@gmail.com으로 문의하십시오.

[R] 내장함수

데이터 분석가에게 제공되어질 목적으로 R 안에 내장되어 있는 기능들로서 대부분 기본 데이터(스칼라값)를 가공하는 기능들입니다. 내부 코드를 볼 수는 없기 때문에 어떤 종류가 있는지, 어떤 파라미터를 전달하는지, 어떤 결과값을 반환하는지만 파악해서 활용하는 것에 중점을 두고 파악하는 것이 중요합니다.

#01. 지금까지 살펴본 내장함수들

  • print(…) : 값을 출력하는 기능
  • typeof(…) : 조건값의 형식을 반환한다.
  • sprintf( format, …) : 문장의 형식을 구성하여 조합결과를 반환한다.
  • c( … ) : 백터를 만들어 반환한다.
  • factor( … ) : 요인을 만들어 반환한다.
  • list( … ) : 리스트를 만들어 반환한다.

#02. 형변환 관련 함수

스칼라 값의 데이터 타입을 다른 스칼라 타입으로 변환한다.

as.character(숫자)

숫자(정수, 실수)를 문자열로 변환후 반환한다.

1
2
3
4
num <- 1L
chrnum <- as.character(num)
print(chrnum)
print(typeof(chrnum))
▶ 출력결과
1
2
[1] "1"
[1] "character"

as.numeric(문자열)

숫자를 담고 있는 문자열을 실수(double)형태로 변환

1
2
3
4
chrnum1 <- "3.14"
result1 <- as.numeric(chrnum1)
print(result1)
print(typeof(result1))
▶ 출력결과
1
2
[1] 3.14
[1] "double"

정수형 문자열의 변환

문자열에 포함된 값은 무조건 실수(double)형으로 변환된다.

1
2
3
4
chrnum2 <- "500"
result2 <- as.numeric(chrnum2)
print(result2)
print(typeof(result2))
▶ 출력결과
1
2
[1] 500
[1] "double"

제약사항

변환할 수 없는 형식인 경우 경고가 발생하면서 NA(결측치)로 변환됨

1
2
k <- "abc"
print( as.numeric(k) )
▶ 출력결과
1
2
3
4
Warning message in print(as.numeric(k)):
"강제형변환에 의해 생성된 NA 입니다"

[1] NA

as.double(문자열)

as.numeric()과 같은 기능

1
2
3
4
chrnum1 <- "3.14"
result1 <- as.double(chrnum1)
print(result1)
print(typeof(result1))
▶ 출력결과
1
2
[1] 3.14
[1] "double"

as.integer(문자열)

파라미터를 정수로 변환한다.

1
2
3
4
chrnum1 <- "123"
result1 <- as.integer(chrnum1)
print(result1)
print(typeof(result1))
▶ 출력결과
1
2
[1] 123
[1] "integer"

소수점에 대한 처리

문자열

실수 형식의 문자열을 변환할 경우 소수점은 버린다.

1
2
3
4
chrnum2 <- "82.6"
result2 <- as.integer(chrnum2)
print(result2)
print(typeof(result2))
▶ 출력결과
1
2
[1] 82
[1] "integer"
스칼라

실수(double)형식의 스칼라값을 변환할 경우 역시 소수점은 버린다.

1
2
3
4
doubleVar <- 123.45
result3 <- as.integer(doubleVar)
print(result3)
print(typeof(result3))
▶ 출력결과
1
2
[1] 123
[1] "integer"

as.logical

숫자값을 논리값(TRUE/FALSE)로 변환한다.

숫자형인 경우 0이 아닌 모든 값은 참(TRUE).

1
2
3
4
a <- 1
b <- 0
print( as.logical(a) )
print( as.logical(b) )
▶ 출력결과
1
2
[1] TRUE
[1] FALSE

제약사항

숫자가 아닌 그 밖의 형식은 변환 불가.

1
2
c <- "hello"
print( as.logical(c) )
▶ 출력결과
1
[1] NA

#03. 문자열 관련 함수

문자열을 가공하여 새로운 값을 만들거나 기존의 문자열에서 일부분을 추출하는 기능들을 담당.

원본은 변하지 않고 가공된 새로운 결과값을 반환한다.

paste(a, b, c … z, sep = “”)

  • 전달되는 파라미터들을 구분자(sep)를 사용하여 하나의 문장으로 결합한다.
  • seq가 생략될 경우 공백이 기본으로 사용된다.
1
2
chrVal1 <- paste("Hello", "R", "Programming", sep=",")
print(chrVal1)
▶ 출력결과
1
[1] "Hello,R,Programming"
1
2
chrVal2 <- paste("안녕하세요", "R", "프로그래밍")
print(chrVal2)
▶ 출력결과
1
[1] "안녕하세요 R 프로그래밍"

paste0(a, b, c … z)

전달되는 파라미터들을 구분자 없이 하나의 문장으로 결합한다.

1
2
chrVal3 <- paste0("안녕하세요", "빅데이터", "분석")
print(chrVal3)
▶ 출력결과
1
[1] "안녕하세요빅데이터분석"

nchar(x)

파라미터로 전달된 문자열의 길이(=글자수)를 카운트한다. 공백이나 특수문자도 한 글자로 취급한다.

1
2
3
a <- "Hello~~ R Programming."
len <- nchar(a)
print( len )
▶ 출력결과
1
[1] 22

tolower(x), toupper(x)

  • 대소문자 변환
  • 원본은 변하지 않는다. 변환 결과가 적용된 복사본이 리턴된다.
1
2
3
4
5
6
7
origin <- "Hello~~ R Programming."

lower <- tolower(origin)
print(lower)

upper <- toupper(origin)
print(upper)
▶ 출력결과
1
2
[1] "hello~~ r programming."
[1] "HELLO~~ R PROGRAMMING."

substr(str, start, end)

  • 원본 문자열 (str)의 start번째 글자부터 end번째 글자까지 자른다.
  • 글자는 1부터 카운트.
  • 모든 파라미터가 필수 입력
1
2
3
origin <- "Hello World"
cut <- substr(origin, 7, 11)
print(cut)
▶ 출력결과
1
[1] "World"

특정 위치부터 끝까지 자르기

끝까지 자르고자 할 경우 nchar() 함수를 사용하여 문자열의 글자수를 카운트한 값을 활용한다.

전체 글자수 = 마지막 글자의 위치

1
2
3
4
origin <- "안녕하세요. R 기반의 빅데이터 분석 과정 입니다."
len <- nchar(origin)
cut <- substr(origin, 8, len)
print(cut)
▶ 출력결과
1
[1] "R 기반의 빅데이터 분석 과정 입니다."

substring(str, start, end=1000000)

substr과 같은 기능

끝 위치에 대한 기본값이 1000000으로 설정되어 있다.

100000자를 초과하지 않는 한 시작위치만 지정하면 끝까지 잘라낸다.

1
2
3
origin <- "Hello World"
cut <- substring(origin, 7)
print(cut)
▶ 출력결과
1
[1] "World"

substr()substring()을 활용한 특정 위치의 글자 바꾸기

함수의 호출결과를 리턴받지 않고, 함수 호출 명령어에 새로운 문장을 대입하면 해당 구간을 원하는 내용으로 변경할 수 있다. 단, 원본 글자수를 초과할 수 없다.

1
2
3
origin <- "Hello World"
substr(origin, 7, 11) <- "BigData"
print(origin)
▶ 출력결과
1
[1] "Hello BigDa"
1
2
3
origin <- "Hello World"
substring(origin, 7) <- "BigData"
print(origin)
▶ 출력결과
1
[1] "Hello BigDa"

gsub(src, dsc, origin)

origin에서 src를 dsc로 변경

1
2
3
origin <- "Hello World, Hello BigData"
k <- gsub("Hello", "Nice", origin)
print(k)
▶ 출력결과
1
[1] "Nice World, Nice BigData"

strsplit(x, split)

문자열 x를 특정 패턴(split)을 기준으로 잘라서 리스트로 반환한다.

1
2
3
4
source <- "스칼라,백터,행렬,리스트,데이터프레임"
cut <- strsplit(source, ",")
print(cut)
print(typeof(cut))
▶ 출력결과
1
2
3
4
[[1]]
[1] "스칼라"       "백터"         "행렬"         "리스트"       "데이터프레임"

[1] "list"

#04.벡터 관련 함수

union(a, b)

두 개의 벡터(a, b)를 중복된 값을 제거하여 결합한 결과를 반환.

1
2
3
4
vector_1 <- c("hello", "world", "r", "program")
vector_2 <- c("hi", "world", "r", "coding")
result = union(vector_1, vector_2)
print(result)
▶ 출력결과
1
[1] "hello"   "world"   "r"       "program" "hi"      "coding"

intersect(a, b)

두 개의 벡터(a, b)에서 중복된 항목들을 추출

1
2
3
4
vector_1 <- c(1, 3, 5, 7, 9)
vector_2 <- c(10, 9, 8, 7, 6)
result <- intersect(vector_1, vector_2)
print(result)
▶ 출력결과
1
[1] 7 9

setdiff(a, b)

a의 원소 중에서 b와 중복되지 않는 항목들을 추출

1
2
3
4
vector_1 <- c("hello", "world", "r", "program")
vector_2 <- c("hi", "world", "r", "coding")
result <- setdiff(vector_1, vector_2)
print(result)
▶ 출력결과
1
[1] "hello"   "program"

setequal(a, b)

순서에 관계 없이 모든 원소들이 동일한지 확인

1
2
3
4
5
6
7
vector_1 <- c("hello", "world", "r", "program")
vector_2 <- c("hi", "world", "r", "coding")
vector_3 <- c("r", "hello", "program", "world")
a <- setequal(vector_1, vector_2)  # 중복되는 항목이 없음
b <- setequal(vector_1, vector_3)  # 중복되는 항목이 존재함
print(a)
print(b)
▶ 출력결과
1
2
[1] FALSE
[1] TRUE
Rating:

크리에이티브 커먼즈 라이선스 ITPAPER(호쌤,쭈쌤)에 의해 작성된 ≪[R] 내장함수≫은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
이 라이선스의 범위 이외의 이용허락을 얻기 위해서는 leekh4232@gmail.com으로 문의하십시오.

comments powered by Disqus