안녕하세요. 무따공입니다 ^^
알프로그래밍 두번째 강의입니다.
무슨 프로그래밍이든 기초가 중요하겠죠?
자료형과 자료구조에 대해서 살펴볼게요 ~
예제를 잘 따라하면서 연습하면 됩니다!!
1. R programming 기초
(1) 기본 자료형 (6가지)과 특수한 형태값
1) 6가지 기본 자료형
- 문자형(character) :문자, 문자열
- 수치형(numeric)
정수(integer) - 1L, 20L (L부호는 정수형으로 데이터를 저장하도록 R에게 일러준다)
실수(double) - 1, 20, 3.14, 2.1
정수(integer) - 1L, 20L (L부호는 정수형으로 데이터를 저장하도록 R에게 일러준다)
실수(double) - 1, 20, 3.14, 2.1
- 복소수형(complex) : 실수 + 허수
- 논리형 (logical) : TRUE(T, 1), FALSE(F, 0)
2) 특수한 형태의 값
2) 특수한 형태의 값
- NULL : 데이터의 값이 존재하지 않는다는 의미이다.
- NA : missing value, 결측값, 손실된값으로 값이 없음을 의미한다.
하나의 요소의 의미
- NA : missing value, 결측값, 손실된값으로 값이 없음을 의미한다.
하나의 요소의 의미
- NaN(not a number) :수학적으로 정의되지 않은 값
- Inf, -Inf :무한대
- 자료형 확인 함수
- 자료형 확인 함수
mode(), typeof() : 자료형 확인
- Rstudio -> test 프로젝트 선택 -> File -> New File ->R Script
아래 내용을 입력후 Ctrl + Enter로 한줄씩 실행, 결과는 Console에서 확인
-------------------------------------
- Rstudio -> test 프로젝트 선택 -> File -> New File ->R Script
아래 내용을 입력후 Ctrl + Enter로 한줄씩 실행, 결과는 Console에서 확인
mode(1)
mode(1L)
mode(3.24)
mode(1L)
mode(TRUE)
mode('홍길동')
mode(3+4i)
typeof(1)
typeof(2.3)
typeof(1L)
typeof(1)
typeof(TRUE)
typeof('홍길동')
typeof(3+4i)
-------------------------------------
> mode(1)
[1] "numeric"
> mode(1L)
[1] "numeric"
> mode(3.24)
[1] "numeric"
> mode(1L)
[1] "numeric"
> mode(TRUE)
[1] "logical"
> mode('홍길동')
[1] "character"
> mode(3+4i)
[1] "complex"
> typeof(1)
[1] "double"
> typeof(2.3)
[1] "double"
> typeof(1L)
[1] "integer"
> typeof(1)
[1] "double"
> typeof(TRUE)
[1] "logical"
> typeof('홍길동')
[1] "character"
> typeof(3+4i)
[1] "complex"
>
참고) RStudio console 지우기: CRT + L
참고) 복소수
one <- 100
two <- 90
three <- 80
four <- 70
five <- NA
is.na(five)
x<-NULL
y<-10
is.null(x)
is.null(y)
is.na(NULL)
--------------------------------------------------
(2)자료구조
- 원자벡터(atomic vector)
- 배열(array)
- 행렬(matrix)
- 리스트(list)
- 데이터프레임(data frame)
- 요인(factors)
- 배열(array)
- 행렬(matrix)
- 리스트(list)
- 데이터프레임(data frame)
- 요인(factors)
1) 원자벡터(Atomic Vectors)
- 벡터가 R에서 가장 일반적이고 기본이 되는 자료구조다.
- 벡터는 character, logical, integer, numeric을 요소로 갖는 집합(collection)이다.
- 한 벡터 내의 타입은 항상 같아야 한다.
- 벡터를 만드는 가장 간단한 방법이 c()함수 이다.
- 숫자형 데이터인 경우 시작값:끝값 형태와 seq(from,to,by)로 사용이 가능하다.
- seq_along() : 주어진 인자데이터 길이 만큼 1,2,3,...길이까지 벡터로 변환된다.
- seq_leng() : 주어진 인자값까지 1,2,3, ... 인자값까지 벡터로 변환한다.
- rep() : 일정한 패턴들을 반복적으로 사용하여 벡터를 만든다.
x<- c(1,2,3,4,5,6,7,8,9,10)
x
c('1','2','3','4',c('1','2','3','4','5'))
x<-1:10
x
x<-2:9
x
seq(1,10,2)
seq(5,8)
seq_along(c('a','b','c','d')) #1,2,3,4
seq_len(5) #1,2,3,4,5
rep(1:3,5) #req(1:3,time=5) 1:3형식을 5번 반복하여 벡터 생성
rep(1:5, each=3) #1~5까지 각각의 수를 3번씩 반복하여 벡터를 생성
- names()함수로 이름을 부여할 수 있다.
x<-c(1,3,5,7)
names(x)<-c("noh","kim","park","baek")
x #x값 확인
- 벡터의 데이터는 [인덱스]로 요소를 가져온다. 인덱스는 1부터 시작
- 벡터의 여러개의 데이터를 가져오기 위해 벡터의 형식을 사용한다.
x<- c('a','b','c','d')
x[1]
x[4]
- [- ] 음수의 인덱스를 사용하여 특정한 요소를 제거하고 가져온다.
x[-3] #'c'만빼고 x를 가져온다.
x[-1] #'a'만빼고 x를 가져온다.
- 벡터의 길이를 알아내는 함수로는 length(), NROW()이다.
NROW()는 행렬에서 사용하는 함수이므로 N행 1열로 취급한다.
length(x)
NROW(x) #대문자 사용
- %in%을 사용하여 벡터에 포함된 값을 확인할 수 있다.
'c' %in% c('a','b','c','d') #TRUE
'e' %in% c('a','b','c','d') #FALSE
2) 배열(Array)
- 벡터와 행렬의 값을 나타낸다.
- 한가지 형태의 자료형의 값으로 구성되어 있다.
- 문자와 숫자를 혼합에서 사용하면 에러가 발생한다.
- 1차원 배열은 벡터, 2차원 배열은 행렬이라 한다.
- 3차원 이상의 차원 구조도 가능하다.
- dim은 dimension의 약자로 차원이란 뜻이다.
- length로 배열의 크기를 알 수 있다.
- 배열의 생성은 dim(), array()를 사용한다.
array(1:20,dim=c(4,5))
array(1:20,dim=c(4,4,3))
array(1:6)
array(1:6, c(2,3))
- 같은 크기의 배열간의 사칙연산 및 같은 위치의 원소간의 연산을 수행할 수 있다.
- 배열의 원소를 추출하는 방법은 “,”로 구분하여 차원의 인덱스를 기술하면 된다.
ary1 #2행2열2면의 모든 값 출력
3) 행렬(matrix)
- 표형식의 데이터를 분석함수를 통해 사용하기 위해 행렬화 해서 사용한다.
- 행렬은 metrix()함수를 이용하여 생성한다.
- 벡터에 차원을 추가하여서도 행렬을 만들수 있다.
a<-1:9
a
dim(a) <- c(3,3)
a
4) 리스트(list)
- 여러데이터 타입을 가지는 데이터 구조이다.
- 리스트요소에 이름을 부여할 수 있다.
- list()함수로 리스트를 생성한다.
x <- list("홍길동", "2016001", 20, c("IT융합", "데이터 관리"))
- 한 벡터 내의 타입은 항상 같아야 한다.
- 벡터를 만드는 가장 간단한 방법이 c()함수 이다.
- 숫자형 데이터인 경우 시작값:끝값 형태와 seq(from,to,by)로 사용이 가능하다.
- seq_along() : 주어진 인자데이터 길이 만큼 1,2,3,...길이까지 벡터로 변환된다.
- seq_leng() : 주어진 인자값까지 1,2,3, ... 인자값까지 벡터로 변환한다.
- rep() : 일정한 패턴들을 반복적으로 사용하여 벡터를 만든다.
x<- c(1,2,3,4,5,6,7,8,9,10)
x
c('1','2','3','4',c('1','2','3','4','5'))
x<-1:10
x
x<-2:9
x
seq(1,10,2)
seq(5,8)
seq_along(c('a','b','c','d')) #1,2,3,4
seq_len(5) #1,2,3,4,5
rep(1:3,5) #req(1:3,time=5) 1:3형식을 5번 반복하여 벡터 생성
rep(1:5, each=3) #1~5까지 각각의 수를 3번씩 반복하여 벡터를 생성
- names()함수로 이름을 부여할 수 있다.
x<-c(1,3,5,7)
names(x)<-c("noh","kim","park","baek")
x #x값 확인
- 벡터의 데이터는 [인덱스]로 요소를 가져온다. 인덱스는 1부터 시작
- 벡터의 여러개의 데이터를 가져오기 위해 벡터의 형식을 사용한다.
x<- c('a','b','c','d')
x[1]
x[4]
x[c(1,3)] #1,3인덱스의 값이 추출된다.
x[c(2,4)] #2,3인덱스이 값
x[c(1:3)] #1~3까지 모든인덱스의 값이 추출된다.
x[c(2:4)]
x[-3] #'c'만빼고 x를 가져온다.
x[-1] #'a'만빼고 x를 가져온다.
- 벡터의 길이를 알아내는 함수로는 length(), NROW()이다.
NROW()는 행렬에서 사용하는 함수이므로 N행 1열로 취급한다.
length(x)
NROW(x) #대문자 사용
- %in%을 사용하여 벡터에 포함된 값을 확인할 수 있다.
'c' %in% c('a','b','c','d') #TRUE
'e' %in% c('a','b','c','d') #FALSE
2) 배열(Array)
- 벡터와 행렬의 값을 나타낸다.
- 한가지 형태의 자료형의 값으로 구성되어 있다.
- 문자와 숫자를 혼합에서 사용하면 에러가 발생한다.
- 1차원 배열은 벡터, 2차원 배열은 행렬이라 한다.
- 3차원 이상의 차원 구조도 가능하다.
- dim은 dimension의 약자로 차원이란 뜻이다.
- length로 배열의 크기를 알 수 있다.
- 배열의 생성은 dim(), array()를 사용한다.
array(1:20,dim=c(4,5))
array(1:20,dim=c(4,4,3))
array(1:6)
array(1:6, c(2,3))
arr <- c(1:24) #1~24의 자료 생성
dim(arr) <- c(3,4,2) #dim() 함수를 이용하여 3행 4열의 행렬 2개 생성
arr
- 같은 크기의 배열간의 사칙연산 및 같은 위치의 원소간의 연산을 수행할 수 있다.
- 숫자와 배열 또는 배열과 숫자간의 산술 연산도 가능하다.
ary1 %*% ary2 #두 배열 원소들의 곱의 합 ary1 <- array(1:8, dim = c(2,2,2))
ary2 <- array(8:1, dim = c(2,2,2))
ary1
ary2
ary1 + ary2
ary1 * ary2
ary2
ary1 + ary2
ary1 * ary2
sum(ary1 * ary2) #위의 결과와 같음
?sum #sum() 확인
?sum #sum() 확인
- 배열의 원소를 추출하는 방법은 “,”로 구분하여 차원의 인덱스를 기술하면 된다.
ary1 #2행2열2면의 모든 값 출력
ary1[,,1] #1면의 값만 출력
ary1[1,1,] #1면1행1열,2면1행1열 값 출력
ary1[1,,-2] #2면을 제외한 1행의 값
ary1[,1,-1] #1면을 제외한 1열의 값3) 행렬(matrix)
- 표형식의 데이터를 분석함수를 통해 사용하기 위해 행렬화 해서 사용한다.
- 행렬은 metrix()함수를 이용하여 생성한다.
- 벡터에 차원을 추가하여서도 행렬을 만들수 있다.
a<-1:9
a
dim(a) <- c(3,3)
a
mat1 <- matrix(1:10, nrow=2) #1~10 2개의 행으로 만든다.
mat1
mat2 <- matrix(1:10, ncol = 2) #1~10 2개의 열로 만든다.
mat2
# 행과 열 이름 주기
names <- list(c("1행", "2행"), c("1열", "2열", "3열"))
matrix(1:6, nrow=2, byrow=TRUE, dimnames=names) #행을 우선적으로 만든다.
# 벡터 결합에 의한 행렬 만들기
v1 <- c(1, 2, 3, 4)
v2 <- c(5, 6, 7, 8)
v3 <- c(9, 10, 11, 12)
x <- cbind(v1, v2, v3) #열로 결합
x
# 행과 열 이름 주기
rownames(x) <- c("1행", "2행", "3행", "4행")
x
colnames(x) <- c("1열", "2열", "3열")
x
rbind(v1, v2, v3) #행으로 결합
4) 리스트(list)
- 여러데이터 타입을 가지는 데이터 구조이다.
- 리스트요소에 이름을 부여할 수 있다.
- list()함수로 리스트를 생성한다.
x <- list("홍길동", "2016001", 20, c("IT융합", "데이터 관리"))
x
y <- list("성명"="홍길동", "학번"="2016001", "나이"=20, "수강과목"=c("IT융합",
"데이터 관리"))
y
# 동일한 결과
y <- list(성명="홍길동", 학번="2016001", 나이=20, 수강과목=c("IT융합", "데이터 관
리"))
# 객체 값의 출력
y["성명"]
y[["성명"]]
y$성명
5) 데이터프레임(data frame)
- 동일한 속성들을 가지는 여러개체들로 구성되며, 각 속성들의 데이터 유형은 서로 다를 수 있다.
- 데이터 프레임은 data.frame() 함수로 생성한다.
# 두 명의 고객 정보에 대한 데이터 프레임 만들기
x <- data.frame(성명=c("홍길동", "손오공"), 나이=c(20, 30), 주소=c("서울", "부산"))
x
# 동일한 결과
x <- data.frame("성명"=c("홍길동", "손오공"), "나이"=c(20, 30), "주소"=c("서울", "부산"))
# 열과 행 단위 추가
x <- cbind(x, 학과=c("e-비즈", "경영"))
x
x <- rbind(x, data.frame(성명="장발장", 나이=40, 주소="파리", 학과="행정"))
x
# 요소 값 보기
x[3, 2]
x[3,]
x[, 2]
x[-2,]
x["성명"]
x$성명
x[["성명"]]
x[[1]]
x[[1]][2]
x[1, 2] <- 21
x
x[1, "나이"] <- 22
x
6) 요인(factors)
- R에서 factor(요인)을 범주형 변수(categorical variable)로 취급한다.
- 아래 gender의 값은 f이고 수준은 m,f 2개이다.
- m,f는 범주형 변수이다.
gender <- factor("f", c("m","f"))
gender
- 범주의 값을 구한다.
- levels() 함수로 범주의 값을 변경할 수 있다.
levels(gender)[1]
levels(gender)[2]
gender
levels(gender)<- c("male", "female")
gender
- ordered()함수를 이용하여 명목형 변수의 level에 순서를 적용할 수 있다.
- factor()에서는 ordered=TRUE라고 지정한다.
ordered(c("a","b","c","d"))
factor(c('a','b','c','d'), ordered=TRUE)
※ 데이터 분류
- 숫치형 : 숫자로 표현한다, 통계에서는 좀더 중요하다.
- 범주형 : 문자로 표현한다.
1) 수치형-이산형
- 셀 수 있으며 정수를 나타낸다.
- 값들이 서로 이어져 있지 않다.
- 예) 1명, 2명, 3명 등 서로 독립적이고 이어져 있지 않다.
2) 수치형-연속형
- 데이터가 연속적인 수치값이다. 주로 실수값이다.
- 예) 175.2cm, 180.12cm 등 키를 나타내는 데이터는 연속형 데이터이다.
- 175~176사이에는 많은수가 존재한다. 떼어낼 수 없는 독립적이지 않은
값으므로 연속형이라 한다.
3) 범주형-명목형
- 문자형태 이다. 카테고리적 특징을 가진다.
- 카테고리를 정해 분류한다고 생각할 수 있다.
- 성별 카테고리, 종교 카테고리, 혈액형 카테고리 등 이안에 값이 담겨져 있다
- 카테고리는 level이라 부르며, level이 '남', '여' 로 정해졌다면 데이터에
['남', '남','여','소녀'] '소녀'가 들어가면 안된다.
- level은 데이터 생성시 명시할 수 있다.
- 예)성별(남,여), 종교(기독교, 불교등), 혈액형(O, AB, B, A)
- 때로는 남,여를 1,2의 숫자로 대신 사용해 통계분석을 하는경우가 있다.
4) 범주형-순서형
- 명목형과 비슷하다, 단지 순서가 있다.
- 예) A+, A-, B+,B-,C+,C-, D+,D-,F
- 명목형과 비슷하다, 단지 순서가 있다.
- 예) A+, A-, B+,B-,C+,C-, D+,D-,F
'공부 > IT-R프로그래밍' 카테고리의 다른 글
R데이터배우기 - [06] 그래프 만들기 (0) | 2017.10.24 |
---|---|
R데이터배우기 - [05] 데이터 가공(데이터 전처리),데이터 정제 (0) | 2017.10.24 |
R데이터배우기 - [04] 데이터 분석을 위한 데이터파악, 데이터 수정 (0) | 2017.10.23 |
R데이터배우기 - [03] 데이터파일 읽기, 데이터프레임 사용하기 (0) | 2017.10.23 |
R데이터배우기 - [01] R 프로그래밍 설치, 자바 설치 (1) | 2017.10.23 |
댓글