[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)
- 원본 문자열
str
의start
번째 글자부터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(변수) | 변수의 길이를 반환한다. |