데이터 R지?
Ch9_데이터 구조 - 1. 데이터 구조와 연산
jsBae
2022. 4. 29. 17:05
1. 변수
2. 벡터
3. 팩터
4. 행렬
5. 리스트
6. 데이터 프레임
1. 데이터 구조와 연산
변수 (Variable) : 수시로 변하는 정보를 담는 저장 공간의 이름,
- 변수는 메모리 공간에 붙이는 레이블
- 변수는 데이터 값을 저장하기 위한 컨테이너!
#변수에 값 할당하기
할당(assignments)이란 어떤 변수에 데이터를 저장하는 것을 말한다.
‘<-’ 또는 ‘=’ 연산자를 이용하여 이루어진다.
R에서 변수 할당 alt + -
예를 들어 x에 1라는 숫자 데이터를 할당하였다면
x <- 1 # ctrl + enter
x

R의 기본적인 데이터 유형
- 수치형 (Numeric) : 숫자, 정수형과 실수형
- 문자형 (Character) : 글자, "", ''로 묶임
- 논리형 (Logical) : True or False (T, F 대문자임, T, F로 사용 할 수 있음)
- 복소수형 (Complex) : 실수와 허수형으로 이루어진 복소수
데이터 구조 | 설명 | 예시 |
Scala | 구성인자가 하나인 벡터 | [1] 1 |
Vector | 동일한 유형의 데이터가 1차원으로 구성 | [1] 1 2 3 4 5 |
Factor | 범주형 데이터 구조 | [1] 1 2 3 Levels: 1 2 3 |
Matrix | 동일한 유형의 데이터가 2차원으로 구조 (행, 열) | [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 |
Array | 동일한 유형의 다차원 데이터 구조 (행렬의 여러 겹으로 표현) | |
List | 서로 다른 데이터 구조의 묶음 | |
Data Frame | 데이터 유형과 상관없이 2차원 형태의 데이터 구조 |

1. 변수명 조건
- 변수명은 영문, 숫자, 마침표, 밑줄 사용이 가능
- 단, 첫글자는 숫자는 불가능.
- 변수명 중간에 공백을 만들 수 없음
- 영문 사용 권장
2. 변수 만들기와 데이터 타입 확인
# 변수의 데이터타입을 확인하기 위해 class(), str() 함수 사용할 수 있음
a <- 2
b <- 3
a+b
[1] 5
str(a)
num 2
class(a)
"numeric"
#문자형 변수 (문자는 큰따옴표(“) 또는 작은따옴표(‘)를 붙여서 할당함)
str <- "a"
str2 <- "b"
Myname <- "홍길동"
str3 <- "hello world" #변수에 여러 개의 문자, 문장도 담을 수 있음.
> c <- FALSE
> c
[1] FALSE
> class(c)
[1] "logical"
변수형 변경
- as.numeric()
- as.logical()
- as.factor()
- as.character()
- as.data.frame()
#숫자형 변수로 변경할 때는 as.numeric() 함수 사용함.
a <- as.numeric(a) # 숫자형으로 변경
#문자형 변수로 변경할 때는 as.character() 함수 사용함.
b <- as.character(b)
예제
> a <- "1"
> class(a)
[1] "character"
> a <- as.numeric(a)
> class(a)
[1] "numeric"
##1.2 벡터
- c() 함수사용
- 수치형의 데이터 뿐만 아니라 문자형, 논리형의 값들도 벡터로 만들 수 있다
> a <- c(3,2,5,8,1)
> y <- c("a","b","c") #문자형
> z <- c(TRUE, FALSE, TRUE) #논리형
> a
[1] 3 2 5 8 1
> y
[1] "a" "b" "c"
> z
[1] TRUE FALSE TRUE
#숫자와 문자가 같이 있는 벡터는 문자형으로 인식
> var <- c(1,2,3,"a","b","c")
> var
[1] "1" "2" "3" "a" "b" "c"
> class(var)
[1] "character"
#콜론(:) 연산자를 사용하여 연속되는 값들 생성 가능
> a <- c(1:10)
> a
[1] 1 2 3 4 5 6 7 8 9 10
#seq(a,b) a에서 b까지 생성
> a <- seq(1,5) #seq(a,b) a에서 b까지 생성
> a
[1] 1 2 3 4 5
> b <- seq(1, 13, by=2)#seq(a,b, by=c) a에서 b까지 c만큼씩씩생성
> b
[1] 1 3 5 7 9 11 13
> c <- seq(1, 13, by=3)
> c
[1] 1 4 7 10 13
> d <- seq(2,20,5 )
> d
[1] 2 7 12 17
> e <- seq(1, 10, length.out=3) #seq(a,b,length.out=c) a에서 b까지 3개수 등분할
> e
[1] 1.0 5.5 10.0
# rep() 반복 함수 사용
> a <- rep(1, times=3) #1을 3번 반복
> a
[1] 1 1 1
> a <- rep(1, times=3) #1을 3번 반복
> a
[1] 1 1 1
> b <- rep(1:3, times=5) #1에서3까지 5반복
> b
[1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
> c <- rep(c(3,6,4), times=4) #3,6,4를 4반복
> c
[1] 3 6 4 3 6 4 3 6 4 3 6 4
> d <- rep(c("haah", "kkk"), times=3) #haha, kkk를 3번 반복 d
> d
[1] "haah" "kkk" "haah" "kkk" "haah" "kkk"
#2.벡터의 연산

> a <- c(1:5)
> a
[1] 1 2 3 4 5
> b <- seq(2,10,2)
> b
[1] 2 4 6 8 10
> a+2
[1] 3 4 5 6 7
> a*10
[1] 10 20 30 40 50
> a+b
[1] 3 6 9 12 15
> b-3
[1] -1 1 3 5 7
> (a+b)*2
[1] 6 12 18 24 30
#비교연산과 논린연산의 수행
> 2>5 #크다
[1] FALSE
> 4<=10 #이하
[1] TRUE
> 7!=7 #같지 않다
[1] FALSE
> 4==7 #같다
[1] FALSE
###OR 연산
> #OR 연산
> TRUE | TRUE
[1] TRUE
> TRUE | FALSE
[1] TRUE
> FALSE| TRUE
[1] TRUE
> FALSE | FALSE
[1] FALSE
> c(TRUE, TRUE, FALSE) | c(FALSE, TRUE, FALSE)
[1] TRUE TRUE FALSE
###and 연산
> TRUE & TRUE
[1] TRUE
> TRUE & FALSE
[1] FALSE
> FALSE & TRUE
[1] FALSE
> FALSE & FALSE
[1] FALSE
> c(TRUE, TRUE, FALSE) & c(FALSE, TRUE, FALSE)
[1] FALSE TRUE FALSE
논리연산에서 숫자의 경우, 0은 FALSE , 0이외는 TRUE
> 1&2
[1] TRUE
> 1&0
[1] FALSE
> !0
[1] TRUE
> !1
[1] FALSE
#연습
> score <- 65
> (score>=50) & (score<60)
[1] FALSE
> (score>=60) & (score<70)
[1] TRUE
#3.벡터인덱싱
인덱싱 : 변수에 어떻게 접근 할 수 있을까?
- 변수 내의 번호(순서)를 호출
- 인덱스는 1부터 시작 (0부터 아님)
- [인덱스]
- [-인덱스] : 인덱스 앞에 -를 붙이면 제외한 나머지 값을 출력
> a <- c(2,7,4,6,1)
> a[1] #첫번째 원소
[1] 2
> a[2] #두번째 원소
[1] 7
> a[3] #세번째 원소
[1] 4
> a[7]
[1] NA
#여러개의 원소를 한번에 접근
> a <- c(2,7,4,6,1)
>
> a[-3] #세번째 원소를 제외한 나머지 출력
[1] 2 7 6 1
> a[c(-3,-5)] #세번째와 다섯번째 원소를 제외한 나머지 출력
[1] 2 7 6
> a[-c(3,5)] #세번째와 다섯번째 원소를 제외한 나머지 출력
[1] 2 7 6
> a[c(-3:-5)] #세번째부터 다섯번째 원소까지를 제외한 나머지 출력
[1] 2 7
> a[-c(3:5)] #세번째부터 다섯번째 원소까지를 제외한 나머지 출력
[1] 2 7
#인데스 이름 지정
> score <- c(95, 80, 85)
> names(score) <- c("Math","English","Korean")
> score
Math English Korean
95 80 85
> score["Math"]
Math
95
> score["English"]
English
80
> score["Korean"]
Korean
85
#원소 값 변경
> a <- c(5, 8, 9, 6, 3, 7)
> a[3] <- 1
> a
[1] 5 8 1 6 3 7
> a[c(1, 6)] <- c(4, 2) #1, 6번째 원소를 4와 2로 변경
> a
[1] 4 8 1 6 3 2
#비교연산에 의한 인덱싱
> x <- c(1, 2, 3, 4, 5)
> x>3
[1] FALSE FALSE FALSE TRUE TRUE
> x[x>3]
[1] 4 5
> x[-(x>3)]
[1] 2 3 4 5
> x <- c(1, 2, 3, 4, 5)
> x >3 #3보다 크면 TRUE, 작으면 FALSE 출력
[1] FALSE FALSE FALSE TRUE TRUE
> x[(x>3)] #3보다 큰 원소만 출력
[1] 4 5
> x[-(x>3)]
[1] 2 3 4 5
> x <=3 #3보다 작거나 같으면 TRUE, 아니면 FALSE 출력
[1] TRUE TRUE TRUE FALSE FALSE
> x[(x<=3)] #3보다 작은 원소만 출력
[1] 1 2 3
> x[-(x<=3)] #3보다 큰 원소 출력
[1] 2 3 4 5
> x <- c(1, 2, 3, 4, 5)
> x%%2==1
[1] TRUE FALSE TRUE FALSE TRUE
> x[x%%2==1]
[1] 1 3 5
> x[!(x%%2==1)]
[1] 2 4
4.벡터 함수
함수명 | 설명 |
sum() | 원소들의 합 |
mean() | 원소들의 평균 |
median() | 원소들의 중간값 |
var() | 원소들의 분산 |
sd() | 원소들의 표준편차 |
max() | 최대값 |
min() | 최소값 |
sort() | 정렬(기본 오른차순), descreasing |
range() | 원소들의 범위 |
legth() | 원소들의 개수 |
table() | 원소들의 빈도수 |
함수명 | 의미 | 사용예 | 결과 |
sqrt() | 제곱근 | sqrt(4) | 2 |
abs() | 절대값 | abs(-4) | 4 |
log() | 로그값 | log(1) | 0 |
exp() | 지수값 | exp(1:5) | 2.718282 |
round() | 반올림 | round(103.456, digit=2) round(103.456, digit=-2) |
103.46 100 |
> x <- c(2, 4, 10, 7, 9, 3, 1, 6, 8, 5)
> sum(x) # x의 모든 원소의 합
[1] 55
> sum(x + 3) # x의 원소에 3을 더한 뒤 합 계산
[1] 85
> mean(x) # x의 평균
[1] 5.5
> mean(x[1:5]) # x의 원소중 1~5번째 원소들의 평균
[1] 6.4
> sd(x) # x에 포함된 원소의 표준편차
[1] 3.02765
> max(x) # x의 최대값
[1] 10
> min(x) # x의 최소값
[1] 1
> sort(x, decreasing = FALSE) # 정렬의 기본은 오름차순(sort(x)도 같은 출력값을 보임)
[1] 1 2 3 4 5 6 7 8 9 10
> sort(x, decreasing = TRUE) # 내림차순 정렬
[1] 10 9 8 7 6 5 4 3 2 1
#수학 함수
> sqrt(14) #제곱근
[1] 3.741657
> abs(-7) #절대값
[1] 7
> log(1) #로그값
[1] 0
> exp(1:5) #지수값
[1] 2.718282 7.389056 20.085537 54.598150 148.413159
> round(103.456) #반올림
[1] 103
> round(103.456, digits=2)
[1] 103.46
> round(103.456, digits=-2)
[1] 100
> round(exp(1:5),digits=1)
[1] 2.7 7.4 20.1 54.6 148.4
1.3 Factor
> size <-c("big","small","middle","small","big","big")
> size
[1] "big" "small" "middle" "small" "big" "big"
> str(size)
chr [1:6] "big" "small" "middle" "small" "big" "big"
> size <- factor(size)
> size
[1] big small middle small big big
Levels: big middle small
> str(size)
Factor w/ 3 levels "big","middle",..: 1 3 2 3 1 1
> as.numeric(size)
[1] 1 3 2 3 1 1
>
> levels(size) #레벨 확인
[1] "big" "middle" "small"
# 예제 : 성적
> grade <- c("A","C","B","D","A","A","B","B","D")
> grade
[1] "A" "C" "B" "D" "A" "A" "B" "B" "D"
> str(grade)
chr [1:9] "A" "C" "B" "D" "A" "A" "B" "B" "D"
> grade <- factor(grade, levels=c("A","B","C","D","F"), ordered = TRUE)
> str(grade)
Ord.factor w/ 5 levels "A"<"B"<"C"<"D"<..: 1 3 2 4 1 1 2 2 4
> table(grade)
grade
A B C D F
3 3 1 2 0
> grade
[1] A C B D A A B B D
Levels: A < B < C < D < F
728x90
반응형