R 자료구조
1.스칼라
2.벡터
3.매트릭스
4.배열
5.데이터프레임
6.리스트
7.팩터
자료구조 요약
1.스칼라(scala)
길이가 1인 벡터, 하나의 데이터만 저장
(skip) 출력시 [1] 값 이라고 표현되는 이유(뒤에서 설명)
'''
x <- 10 # 길이 1인 numeric 벡터
length(x) # 1
'''
2.벡터(vector)
같은 자료형을 가진 여러개의 데이터를 저장하는 구조
1차원구조, 순서 개념이 있음
'''
v_num <- c(1, 2, 3) # numeric 벡터
v_char <- c("a", "b", "c") # character 벡터
v_log <- c(TRUE, FALSE) # logical 벡터
'''
3.매트릭스(matrix, 행렬)
같은 자료형을 가진 여러개의 데이터를 저장하는 구조
2차원 구조(행, 열 구조)
행(row):가로줄, 열(column): 세로줄
'''
m <- matrix(1:6, nrow=2, ncol=3)
'''
4.배열
메트릭스를 여러개 저장하는 구조
다차원 자료구조(N차원)
'''
a <- array(1:12, dim = c(2,3,2)) # 2×3×2 배열
'''
5.데이터프레임
매트릭스와 행과 열을 가진 2차원 표현
열마다 다른 자료형을 저장할수 있다.
'''
df <- data.frame(
name = c("Kim", "Lee"),
age = c(25, 30),
sex = c("M", "F")
)
'''
6.리스트
: 여러개의 자료구조를 저장하는 구조
: [벡터,벡터, 벡터][벡터,배열, 매트릭스]
'''
lst <- list(
number = 1:3,
text = "hello",
flag = TRUE,
df = data.frame(x=1:2, y=c("a","b"))
)
'''
7.팩터(Factor)
범주형(categorical) 데이터를 다루는 자료구조
: 지정된 범위의 값만 저장할수 있도록 제한한 벡터
내부적으로는 정수형 + levels(범주 이름) 로 저장
'''
sex <- factor(c("M", "F", "M", "F"))
levels(sex) # "F" "M"
'''
* 여러개의 자료형을 사용할 수 있는것
: 리스트 ,데이터프레임
* 하나의 자료형만 사용할 수 있는것
: 벡터, 메트릭스, 배열, 팩터
-벡터
[ 값1 ][ 값2 ][ 값3 ]...
같은 자료형을 가진 여러 값들을 저장하는 1차원 구조
하나의 자료형의 여러개 값들을 변수 1개로 관리
여러개 값들이 나열되어 있어서 순서가 존재
인덱스: 각 값에 부여된 순서번호, 1번부터 순차 증가
벡터생성
1) c() 함수 (combine)
c(값1, 값2, 값3...)
여러개의 값을 하나의 벡터로 결합해서 생성
2) seq() 함수 (sequence)
seq(시작값, 끝값, 증감값)
seq(from=시작값,to=끝값,by=증가값)
시작부터 끝값까지 증감(또는 감소)하는 값들을 하나의 벡터로 생성
3) 콜론 연산자(:) *입력방법: shift + ;(세미콜론)
시작값:끝값
시작값부터 끝깞까지 1씩 증감/감소하는 숫자 벡터 생성
4) rep() 함수(replicate)
rep(벡터, times, each)
기존 벡터를 복제해서 새로운 벡터를 만듦
벡터의 요소(element)를 각각 each번 반복하고, 이 행위를 times번 반복하는 벡터생성
*each: 요소 반복, times: 대상 벡터를 반복
*times나 each 하나만 쓸수도 있다.
벡터에서 요소 가져오기(인덱스 접근)
# () 소괄호, {} 중괄호, [] 대괄호
인덱스 번호 : 벡터에서 요소(element)를 접근할때 사용하는 정수
v = c('a','b','c')
[1] [2] [3] -> 인덱스 번호, * 1부터 시작(다른언어는 0부터 시작)
* 0번째 인덱스에는 빈벡터가 리턴된다.(length(v)=0)
1.벡터에서 하나의 요소(element) 가져오기
원하는 특정 요소를 가져올때는 해당 요소에 부여된 인덱스 번호 사용
벡터명[인덱스 번호]
ex) v[1] # 'a'
2.벡터에서 여러개의 요소 가져오기
여러개의 값들을 가져올때는 대괄호 안에 해당 요소들의 인덱스 번호가 담긴 벡터를 사용
ex) v[1:2] # 'a', 'b'
*시작 인덱스 ~ 끝 인덱스까지 가져옴(다른언어는 보통 마지막_인덱스-1까지 접근)
v[c(1,2)] # 'a', 'b'
기타) v[5] = 'e' # 오류발생 안함
print(v) # 'a', 'b', 'c' NA, 'e' => 벡터의 재확장 규칙(NA가 들어감)
3.벡터에서 특정 요소 제외하고 가져오기
음수 인덱스를 사용하면 그 자리 제외하고 가져옴
벡터명[-(제외할 여러개의 인덱스번호가 담긴 벡터]
ex) v[-1] # 'b', 'c'
v[-c(1,3)] # 'b'
4.논리값 인덱스
벡터를 사용해서 원하는 자리만 고른다.
벡터의 사이즈만큼 논리벡터가 순차적으로 적용됨 + T인 값만 가져옴
ex) v[c(T, F, T)] # 'a', 'c'
#T T T
v[T] # 'a', 'b', 'c'
v[F] # 빈벡터
*조건을 통해서 특정 요소 가져오기
1) 논리 벡터를 생성
2) 벡터의 인덱스 자리에 논리 벡터를 적용
3) 전체 요소에 논리값이 순차적으로 부여도미, 논리벡터가 TRUE인 값만 가져옴
ex) num_vec[num_vec %% 2 ==0]
5.이름 인덱스
x <- c(a=100, b=200, c=300)
a b c
[100] [200] [300]
x['a'] # 100
벡터의 정보
: str() : 벡터자료형/인덱스번호, 요소를 보여준다.
ex) int [1:5] 1 2 3 4 5
: length() : 벡터의 길이 조회(요소개수)
ex) 5
: names() 열이름 가져오기(함수)
* names(벡터변수) <- c("이름1", "이름2", "이름3"...) : 열이름 부여 가능
벡터의 열 이름은 중복되면 안됨, 한글사용X
* 벡터의 열 이름을 지정하면 인덱스 번호 대신, 열이름으로 가져올수 있다.
벡터의 사용
1. 벡터 값 추가
벡터명[인덱스번호] <- 새로운 값
벡터의[열이름] <- 새로운 값
2. 벡터의 값 삭제
벡터명 <- 벡터명[-삭제할 요소 인덱스]
3. 벡터 값 수정
벡터명[수정인덱스번호] <- 새로운값
벡터명[열이름] <- 새로운값
* 열이름수정: names(벡터변수)[index] <- "열이름"
매트릭스(matrix, 행렬)
같은 자료형의 여러개의 데이터를 2차원 구조로 저장한다.
행: 가로줄, row
열: 세로줄, column
매트릭스 생성
matrix(2차원 벡터)
벡터를 기반으로 행렬을 생성한다.
ex) 20칸 짜리 벡터를 4행5열의 매트릭스로 생성
matrix 생성 함수(기능) 존재, arguments(인수) 정보
(data) 값 전달
(nrow) 행의개수
(ncol) 열의개수
(byrow) False(데이터를 채우는 방향, 기본 열방향), True(행방향)
매트릭스와 연산자
매트릭스와 비교 연산자를 비교하면 결과가 논리벡터가 나온다
*매트릭스와 연산자(비교, 산술 등)를 사용하면 element(요소)간 연산 수행
m2 <- matrix(data=1:4, nrow=2)
# 1 3
# 2 4
m2 > 2
# F T
# F T
매트릭스에서 요소 가져오기
매트릭스명[행 인덱스 번호, 열 인덱스 번호]
* 매트릭스의 요소는 행과 열 인덱스 번호 2개를 가지고 있다.
1. 하나의 행 요소 가져오기
매트릭스명[행 인덱스번호, ]
* 생략된 인덱스 번호는 모든 것(열)을 의미
2. 하나의 열 요소 가져오기
매트릭스명[, 열 인덱스번호]
* 생략된 인덱스 번호는 모든 것(행)을 의미
3.하나의 요소 가져오기
매트릭스명[행 인덱스번호, 열 인덱스번호]
4.특정 행과 열을 제외한 데이터 가져오기
매트릭스명[-제외할 행 인덱스번호, -제외할 열 인덱스번호]
*만약에 인덱스 자리에 매트릭스를 사용한다면,
1) 논리 매트릭스
기준 매트릭스와 인덱스로 사용하는 매트릭스가
둘다 벡터로 변환되어 벡터(논리벡터)로 사용된다
-> 결과가 벡터로 나온다.
2) 숫자 매트릭스
인덱스로 사용하는 매트릭스의 각 행 요소를
기준 매트릭스 행과 열 인덱스 번호로 사용한다.
매트릭스의 정보
1. str(): 매트릭스의 정보
2. length(): 매트릭스의 전체 데이터의 개수
3. dim(): 행과 열의 수, dimension(차원)
* 직선: 1차원
표: 2차원
공간: 3차원
4. nrow(): 매트릭스의 행의 개수
5. ncol(): 매트릭스의 열의 개수
6. dimnames(): 매트릭스의 행과 열의 이름
* rownames(): 행이름
* colnames(): 열이름
-> 매트릭스도 벡터와 마찬가지로 이름을 붙이면
인덱스번호 대신 이름을 사용할 수 있다.
매트릭스 사용
1.추가
행추가: rbind(기존 매트릭스, 추가할 행)
열추가: cbind(기존 매트릭스, 추가할 열)
2.수정
매트릭스명[행 인덱스번호, 열 인덱스번호] <- 새로운 값
3.삭제
매트릭스명 <- 삭제할 요소를 제외하고 가져온 매트릭스
배열(Array)
(다른언어의 배열은 vector와 유사, R의 배열은 다른 의미)
행, 열 면의 3차원 형태(x,y,z축)
-> 여려개의 매트릭스를 가진 구조
같은 자료형의 여러개의 데이터를 저장할 수 있다.
배열생성
array(데이터, dim=c(행의수, 열의수, 면의수))
*매트릭스나 배열은 벡터가 dim, dimnames 속성을 가진것이다)
dim 옵션에 값을 몇개를 전달하냐에 따라 1차원, 2차원, 3차원의 배열이 생성
-> 주어진 데이터를 전달한 해의수, 열의수 , 면의수를 가진 배열로 생성
배열의 요소 가져오기
배열명[행 인덱스번호, 열 인덱스번호, 면 인덱스번호]
*인덱스 번호를 생략하면 모든 행, 모든 열, 모든 면을 가져옴
배열의 정보
1. str(): 배열의 정보를 보여준다.
2. length(): 배열 전체의 데이터 개수
3. dim: 배열의 행, 열, 면의 개수
4. dimnames(): 배열의 행, 열, 면의 이름
배열의 변경
1. 추가
array(c(기존배열), 새로운요소)
2. 수정
배열명[행 인덱스번호, 열 인덱스번호, 면 인덱스번호] <- 새로운값
3. 삭제
배열명 <- 삭제할 요소를 제외하고 가져온 배열
데이터프레임(dataframe)
서로 다른 자료형의 값을 저장할 수 있는 매트릭스(2차원) -> 행렬
* 각 열마다 데이터의 자료형을 다르게 사용 가능
실질적으로 사용하는 엑셀, 데이터베이스의 테이블형태이며
R에서 가장 많이 사용한다.
* 리스트와 벡터 혼합형으로 열은 리스트,
열의 안의 데이터는 벡터 자료구조이다.
** variable -> 열(세로줄)-> 변수(변인
observation -> 행(가로줄) -> 관측치(관측값)
(통계적 표현)
* variable: 변수(변인)->열(column)->속성(attribute)->특성(feature)
* observation: 관측치(관측값)-> 행(row)
ex) 3명 데이터를 표로 작성하시오
1.길동: 수학 70, 영어 95 , 국어 80
2.영희: 수학 90, 영어 100, 국어 85
3.훈아: 수학 100, 영어70 , 국어 100
ex) 표1
이름 수학 영어 국어
===================================
길동 70 95 80
영희 90 100 85
훈아 100 70 100
-> dataframe의 표현 형식
ex) 표2
이름 길동 영희 훈아
===================================
수학 70 90 100
영어 95 100 70
국어 80 85 100
데이터프레임 생성
data.frame(열이름 = 벡터, 열이름 = 벡터...)
여러개의 벡터 하나하나가 하나의 열로 생성된다.
* 입력된 벡터는 세로(열) 단위로 입력됨
data.frame(매트릭스) -> 매트릭스 전체가 데이터프레임이 됨
데이터프레임의 정보
1.str(): 데이터프레임의 요약정보
2.length(): 데이터프레임의 열의 수
3.summary(): 데이터프레임의 기초 통계정보
데이터프레임의 사용
1.추가
데이터프레임명[새로운 열 인덱스번호] <- 새로운값
데이터프레임명[새로운 열 이름] <- 새로운값
데이터프레임명$새로운 열이름 <- 새로운 값
*데이터프레임은 열마다 다른 자료형을 가지므로
행을 추가시 자료형이 변환되는 부분을 주의
2.수정
데이터프레임의 수정할 요소 <- 수정할 값
3.삭제
데이터프레임명 <- 삭제할 요소를 제외하고 가져온 데이터프레임
데이터프레임며명$삭제할 열이름 <- NULL
리스트
벡터, 행렬, 배열, 데이터프레임 등 다양한 자료구조를 저장하는 구조
여러개의 자료구조를 저장하는 하나의 목록
*파이썬의 dictionary 자료구조와 유사
*key-value 한쌍으로 데이터가 저장
*key를 직접 지정하지 않으면, 자동으로 정수형 인덱스 번호 부여
**리스트(list) -> generic vector
벡터(vector) -> atomic vector
리스트 생성
list(벡터, 매트릭스, 배열, 데이터프레임, 하나의 값 등..)
list(키=값, 키=값...)
*키를 직접 명시하지 않으면 인덱스 번호를 키로 사용한다
리스트의 요소 가져오기
리스트[인덱스번호] -> 또다른 리스트로 요소를 가져온다
리스트[[인덱스번호]] -> 해당 요소의 자료형으로 가져온다
리스트명$키 -> 대괄호 2번 사용한 것처럼 요소의 자료형 가져옴
리스트 사용
1. 추가
리스트명[[새로운키]] <- 새로운 값
2. 수정
리스트명[[키]] <- 수정할 값
3. 삭제
리스트명[[키]] <- NULL
리스트명$키 <- NULL
팩터(factor, 요인)
범주형 데이터를 표현하는 자료형
범주형 데이터: 정해진 몇개의 범주의 값으로 구성된 데이터
ex) 성별: 남자, 여자, 혈액형: A,B,AB, O
벡터와 동일한 구조이지만 지정한 범주안의 값만 저장할 수 있다.
범주(level,수준): 저장될수 있는 데이터의 범위
# 벡터예제
genders <- c("남성", "여성", "남성")
genders[4] <- "강아지"
factor(벡터, 범주)
'프로그래밍 > R' 카테고리의 다른 글
| R언어, 제어문 (0) | 2025.09.20 |
|---|---|
| R 매트릭스 (matrix, 행렬) (0) | 2025.09.14 |
| R언어 벡터 (0) | 2025.09.09 |
| R 연산자 (1) | 2025.09.08 |
| 컴퓨터 기초, 프로그래밍 기초(변수, 자료형) (0) | 2025.09.07 |