[Fast campus] Data Science with R 1기 - 이부일 강사님
R 공부하면서 배운 내용 복습 겸 정리하는 곳입니다.
1. 벡터(Vector)
2. 요인(Factor)
3. 행렬(Matrix)
4. 배열(Array)
5. 데이터 프레임(Data.Frame)
6. 리스트(List)
7. 데이터 테이블(Data.Table)
8. 시계열(Time Series)
I. 벡터(Vector)
# 하나 이상의 값(원소 : element)으로 이루어짐
# 하나의 열(column)로 되어 있음
# 하나의 데이터 유형만 가짐
1. 벡터를 생성하는 방법 -> 원소가 2개 이상일 때 사용하는 방법
# 벡터를 생성하기 보다는 데이터의 일부를 추출할 때 많이 사용
(1) c(원소1, 원소2, ...)
# c : combine, concatenate의 약자
# numeric, character, logical 타입의 벡터를 만들 수 있다.
# 원소들 간의 규칙이 없을 경우에 사용
# vector는 하나의 유형만 가진다.
1 2 3 4 5 6 7 | > v1 = c(1, "Lee", FALSE) > v1 [1] "1" "Lee" "FALSE" > v2 = c(1, TRUE, FALSE) > v2 [1] 1 1 0 | cs |
# 우선 순위가 높은 유형에서 하위 유형으로 변환은 잘 이루어지지 않는다.
# character -> numeric : "숫자" 일 경우 변환 가능
# logical -> numeric : TRUE는 1, FALSE는 0를 반환
(2) :
# numeric vector에만 적용됨
# 1씩 증가 or 감소되는 숫자로 이루어진 벡터를 생성할 때 사용
# 규칙이 있는 숫자
# start : end
# start < end : 1씩 증가
# start > end : 1씩 감소
# start = end : start or end
# start부터 시작해서 end를 넘지 않을 때 까지 1씩 증가 or 감소
# 항상 start 부터 시작한다.
1 2 3 4 5 6 7 8 | > 1:5 [1] 1 2 3 4 5 > -2.3:1 [1] -2.3 -1.3 -0.3 0.7 > 1:-2.3 [1] 1 0 -1 -2 | cs |
# start가 실수면 마무리도 실수
# start가 정수면 마무리도 정수
(3) seq(from=, to=, by=)
# argument 명은 항상 적어주자
# seq : sequence의 약자 - 수열
# numeric vector에만 사용
# : 의 확장 개념
# from : start / to : end / by : 증가 or 감소 폭
1 2 3 4 5 6 | > seq(from = 1, to = 100, by = 5) [1] 1 6 11 16 21 26 31 36 41 46 51 56 61 66 [15] 71 76 81 86 91 96 > seq(from = 1, to = 5, by = 0.5) [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 | cs |
문제. 5부터 시작해서 1을 넘지 않을 때 까지 0.1씩 감소
1 2 3 | > seq(from = 5, to = 3, by = -0.1) [1] 5.0 4.9 4.8 4.7 4.6 4.5 4.4 4.3 4.2 4.1 4.0 [12] 3.9 3.8 3.7 3.6 3.5 3.4 3.3 3.2 3.1 3.0 | cs |
# by에는 감소는 '-' 부호가 필요하다.
(4) sequence(숫자)
# numeric vector 에만 적용됨
# 1 ~ '숫자' 사이의 정수로 이루어진 벡터
1 2 | > sequence(10) [1] 1 2 3 4 5 6 7 8 9 10 | cs |
(5) rep(vector, times=, each=)
# each는 vector 각각의 원소를 반복
# times는 vector를 반복
# argument 우선순위 : each > times
# numeric, character, logical vector에 적용됨
# rep : replicate의 약자
문제. "남자" 3개, "여자" 3개를 가지는 벡터를 생성
1 2 | > rep(c("남자","여자"), each = 3) [1] "남자" "남자" "남자" "여자" "여자" "여자" | cs |
# ex = c("남자", "여자") 를 생성하고 rep(ex, each=3)로 사용할 시 ex라는 메모리 낭비가 발생
# 필요없는 변수는 만들지 말자
* ?rep의 examples - 반올림 오차(round off error)
1. rep(1, 40*(1-.8)) # length 7 on most platforms
2. rep(1, 40*(1-.8+1e-7) # better
1 2 3 4 5 | > rep(1, 40*(1-.8)) [1] 1 1 1 1 1 1 1 > rep(1, 40*(1-.8)+1e-7) [1] 1 1 1 1 1 1 1 1 | cs |
두 코드를 실행시 1의 출력 개수가 7번, 8번으로 다른 것을 볼 수 있다.
# (1-.8) 이라는 값이 0.2지만 R상에서는 0.2에 근사한 0.199999와 같은 값을 가지는게 아닐까?
# 따라서 rep함수의 argument로 사용시 40*(1-.8)이 7이라는 값으로 인식되어서 반올림오차(round off error)가 발생 하므로,
# 1e-7 이라는 값을 더해서 문제를 해결
(6) paste(벡터1, 벡터2, ..., sep=)
# 벡터의 각각의 원소들을 합쳐서 character 형태의 원소를 생성
# 결과는 character 형태. sep을 주지 않으면 공백이 들어간다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | > paste(1, 1) [1] "1 1" > paste(1, 1, sep="-") [1] "1-1" > paste(1, 1, sep="") [1] "11" > paste("x", 1, sep="") [1] "x1" > paste("X", 1:4, sep="") [1] "X1" "X2" "X3" "X4" | cs |
# 재활용 규칙과 벡터화가 같이 적용됨
2. 벡터의 속성
(1) length(벡터)
# 벡터가 가지는 원소의 개수
1 2 3 | > age = c(26, 27, 25) > length(age) [1] 3 | cs |
(2) names(벡터)
# 원소의 이름
1 2 3 4 5 6 7 8 | > age = c(26, 27, 25) > age [1] 26 27 25 > names(age) = c("Ha", "Jeong", "Kim") > age Ha Jeong Kim 26 27 25 | cs |
# age는 하나의 열을 가지는 벡터일뿐 names는 age 벡터의 부수적인 설명 역할
# NA(Not Available) - Missing Value = 결측치, 결측값
# 전체에서 특정 부분에 데이터가 없는 경우
# NULL : 객체, 개체(Object) 자체가 없는 경우
# 데이터를 그래프로 나타낼 때 NA는 특정 값이 존재 하지 않는 것이고,
# NULL은 그래프 자체가 없다는 의미
3. 벡터의 슬라이싱(Slicing) = 인덱싱(Indexing)
# 벡터 중 일부의 원소(들)을 추출
# 벡터[index]
# R에서 index는 1부터 시작한다
문제. 1,4,5 번째 원소를 한번에 가져오기
1 2 3 | > income = c(500, 1000, 3500, 400, 300) > income[c(1,4,5)] [1] 500 400 300 | cs |
문제. 2번째 부터 5번째 가져오기
1 2 | > income[2:5] [1] 1000 3500 400 300 | cs |
문제. 홀수 번째 원소 값 가져오기
1 2 3 4 | > income[seq(from = 1, to = length(income), by = 2)] [1] 500 3500 300 | cs |
4. 벡터의 연산 : +, -, *, /
# R의 특징 - 재활용 규칙(Recycling Rule)
1 2 3 4 5 | > v1 = 1:3 > v2 = 4:6 > v3 = v1 + v2 > v3 [1] 5 7 9 | cs |
1 2 3 | > v3 = 1:6 > v1 + v3 [1] 2 4 6 5 7 9 | cs |
# 데이터의 개수 v1 = 3 / v3 = 6
# 연산시 데이터의 개수가 큰 만큼 채워준다.
# Recycling Rule
# Warning message
1 2 3 4 5 6 | > v4 = 1:8 > v1 + v4 [1] 2 4 6 5 7 9 8 10 Warning message: In v1 + v4 : longer object length is not a multiple of shorter object length | cs |
# Warning message는 R이 결과에 이상이 있는거 같지 않니? 라고 물어봐주는 역할
# 결과에 문제가 없다면 그냥 사용하면 된다.
'Programming > R' 카테고리의 다른 글
[Fast campus] 06. 데이터 핸들링 1 (0) | 2017.07.20 |
---|---|
[Fast campus] 05. 외부 데이터 읽어오기 (0) | 2017.07.19 |
[Fast campus] 04. 데이터의 유형(Type of Data) - 배열(Array), 데이터 프레임(Data.Frame), 리스트(List) (0) | 2017.07.19 |
[Fast campus] 03. 데이터의 유형(Type of Data) - 요인(Factor), 행렬(Matrix) (0) | 2017.07.19 |
[Fast campus] 01. Basic (0) | 2017.07.19 |