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

+ Recent posts