[R] 내장함수

[R] 내장함수

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

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

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

#02. 형변환 관련 함수

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

1) 숫자형과 문자열간의 상호 변환

as.character(숫자)

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

num <- 1L
chrnum <- as.character(num)
print(chrnum)
print(typeof(chrnum))

💻 출력결과

[1] "1"
[1] "character"

as.numeric(문자열)

  • 숫자를 담고 있는 문자열을 실수(double)형태로 변환한다.
  • 문자열 형태의 값은 무조건 실수(double)형으로 변환된다.
  • 변환할 수 없는 형식인 경우 경고가 발생하면서 NA(결측치)로 변환된다.
  • NA : Not Applicable (해당 없음 혹은 공란)

as.numeric() 함수

chrnum1 <- "3.14"
result1 <- as.numeric(chrnum1)
print(result1)
print(typeof(result1))

💻 출력결과

[1] 3.14
[1] "double"

as.numeric() 함수로 정수형을 문자열로 변환

chrnum2 <- "500"
result2 <- as.numeric(chrnum2)
print(result2)
print(typeof(result2))

💻 출력결과

[1] 500
[1] "double"

숫자로 변환할 수 없는 경우

k <- "abc"
print( as.numeric(k) )

💻 출력결과

Warning message in print(as.numeric(k)):
"강제형변환에 의해 생성된 NA 입니다"
[1] NA

as.double(문자열)

as.numeric()과 같은 기능

chrnum1 <- "3.14"
result1 <- as.double(chrnum1)
print(result1)
print(typeof(result1))

💻 출력결과

[1] 3.14
[1] "double"

as.integer(문자열)

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

실수 형식의 문자열을 변환하거나 실수(double)형식의 스칼라 값을 변환할 경우 소수점은 버린다.

as.integer() 함수

chrnum1 <- "123"
result1 <- as.integer(chrnum1)
print(result1)
print(typeof(result1))

💻 출력결과

[1] 123
[1] "integer"

실수 형식의 문자열 변환

chrnum2 <- "82.6"
result2 <- as.integer(chrnum2)
print(result2)
print(typeof(result2))

💻 출력결과

[1] 82
[1] "integer"

실수 타입의 스칼라 값을 변환

doubleVar <- 123.45
result3 <- as.integer(doubleVar)
print(result3)
print(typeof(result3))

💻 출력결과

[1] 123
[1] "integer"

as.logical

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

숫자형인 경우 0이 아닌 모든 값은 참(TRUE) / 0은 거짓(FALSE)

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

숫자를 논리값으로 변환하는

a <- 1
b <- 0
c <- "hello"
print( as.logical(a) )
print( as.logical(b) )
print( as.logical(c) )

💻 출력결과

[1] TRUE
[1] FALSE
[1] NA

#03. 문자열 관련 함수

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

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

1) 문자열 결합하기

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

전달되는 파라미터들을 구분자(sep)를 사용하여 하나의 문장으로 결합한다.

seq가 생략될 경우 구분자가 공백(띄어쓰기)로 지정되어 결합한다.

chrVal1 <- paste("Hello", "R", "Programming", sep=",")
print(chrVal1)

chrVal2 <- paste("안녕하세요", "R", "프로그래밍")
print(chrVal2)

💻 출력결과

[1] "Hello,R,Programming"
[1] "안녕하세요 R 프로그래밍"

paste0(a, b, c … z)

전달되는 파라미터들을 구분자 없이(=띄어쓰기 없이) 하나의 문장으로 결합한다.

chrVal3 <- paste0("안녕하세요", "빅데이터", "분석")
print(chrVal3)

💻 출력결과

[1] "안녕하세요빅데이터분석"

2) 글자수 세기

nchar(x)

파라미터로 전달된 문자열의 길이(=글자수)를 카운트한다.

공백이나 특수문자도 한 글자로 취급한다.

a <- "Hello~~ R Programming."
len <- nchar(a)
print( len )

💻 출력결과

[1] 22

3) 문장 바꾸기

tolower(x), toupper(x)

  • tolower(x) : x에서 모든 대문자를 소문자로 변환하여 반환한다.
  • toupper(x) : x에서 모든 소문자를 대문자로 변환하여 반환한다.
  • 원본은 변하지 않는다. 변환 결과가 적용된 복사본이 리턴된다.
origin <- "Hello~~ R Programming."

lower <- tolower(origin)
print(lower)

upper <- toupper(origin)
print(upper)

💻 출력결과

[1] "hello~~ r programming."
[1] "HELLO~~ R PROGRAMMING."

gsub(src, dsc, origin)

origin에서 src를 dsc로 변경

origin <- "Hello World, Hello BigData"
k <- gsub("Hello", "Nice", origin)
print(k)

💻 출력결과

[1] "Nice World, Nice BigData"

4) 문자열 자르기

substr(str, start, end)

  • 원본 문자열 strstart번째 글자부터 end번째 글자까지 자른다.
  • 글자는 1부터 카운트.
  • 모든 파라미터가 필수 입력
  • 끝까지 자르고자 할 경우 nchar() 함수를 사용하여 문자열의 글자수를 카운트한 값을 활용한다.

substr() 문자열 자르기

origin <- "Hello World"
cut <- substr(origin, 7, 11)
print(cut)

💻 출력결과

[1] "World"

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

origin <- "안녕하세요. R 기반의 빅데이터 분석 과정 입니다."
len <- nchar(origin)
# 전체 글자수 = 마지막 글자의 위치
cut <- substr(origin, 8, len)
print(cut)

💻 출력결과

[1] "R 기반의 빅데이터 분석 과정 입니다."

substring(str, start, end=1000000)

  • substr과 같은 기능
  • 끝 위치에 대한 기본값이 1000000으로 설정되어 있다.
  • 100000자를 초과하지 않는 한 시작위치만 지정하면 끝까지 잘라낸다.
origin <- "Hello World"
cut <- substring(origin, 7)
print(cut)

💻 출력결과

[1] "World"

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

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

  • 변경할 내용이 지정된 원본 글자수를 초과하는 경우 초과되는 내용은 잘림
  • 변경할 내용이 지정된 원본 글자수 보다 적은 경우 부족한 내용은 원본이 사용된다.

변경할 내용이 원본 글자수를 초과하는 경우에 대한 문장 바꾸기

origin <- "Hello World"
# 변경할 내용이 지정된 원본 글자수를 초과하는 경우 초과되는 내용은 잘림
substr(origin, 7, 11) <- "BigData"
print(origin)

💻 출력결과

[1] "Hello BigDa"

변경할 내용이 원본 글자수를 초과하지 않는 경우에 대한 문장 바꾸기

origin <- "Hello World"
# 변경할 내용이 지정된 원본 글자수 보다 적은 경우 부족한 내용은 원본이 사용된다.
# World에 Nice를 적용하면서 원본의 마지막 글자 d가 사용될 것이다.
substring(origin, 7) <- "Nice"
print(origin)

💻 출력결과

[1] "Hello Niced"

strsplit(x, split)

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

source <- "스칼라,백터,행렬,리스트,데이터프레임"
cut <- strsplit(source, ",")
print(cut)
print(typeof(cut))

💻 출력결과

[[1]]
[1] "스칼라"       "백터"         "행렬"         "리스트"       "데이터프레임"
[1] "list"

#04.벡터 관련 함수

1) 중복 제거

union(a, b)

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

vector_1 <- c("hello", "world", "r", "program")
vector_2 <- c("hi", "world", "r", "coding")
result = union(vector_1, vector_2)
print(result)

💻 출력결과

[1] "hello"   "world"   "r"       "program" "hi"      "coding"

intersect(a, b)

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

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] 7 9

setdiff(a, b)

  • a의 원소 중에서 b와 중복되지 않는 항목들을 추출
  • 차집합의 개념
vector_1 <- c("hello", "world", "r", "program")
vector_2 <- c("hi", "world", "r", "coding")
result <- setdiff(vector_1, vector_2)
print(result)

💻 출력결과

[1] "hello"   "program"

2) 원소 비교

setequal(a, b)

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

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] FALSE
[1] TRUE

3) 기초 통계 함수

함수 설명
mean(벡터) 벡터의 원소에 대한 평균값을 반환한다.
sum(벡터) 벡터의 원소에 대한 합계를 반환한다.
median(벡터) 중앙값을 반환한다 (중앙값은 EDA 관련 단원 참조)
log(변수) 변수의 로그값을 반환한다.
sd(변수) 변수의 표준 편차를 반환한다.
var(변수) 변수의 분산 산출
cov(변수1, 변수2) 두 변수간의 공분산 산출
cor(변수1, 변수2) 두 변수간의 상관계수를 산출한다.
length(변수) 변수의 길이를 반환한다.
호쌤(이광호)'s Picture

About 호쌤(이광호)

메가스터디IT아카데미에서 Java, Spring, Python, Frontend 등을 강의하는 IT 전문 강사이자 프리렌서 개발자 입니다.
https://www.youtube.com/@hossam-codingclub

Seoul, Korea http://www.hossam.kr