R 프로그래밍

2. 변수, 자료형

잘잔디 2023. 4. 17. 12:18

1. 변수

변수 이름 생성 규칙

  • 사용 가능 : 알파벳, 숫자, _ , . 등
  • 사용 불가 : -
  • 숫자로 시작하면 안 된다.

변수값 할당 규칙

  • < - , <<- , = dustkswk tkdyd
  • =는 때에 따라 사용할 수 없는 경우가 있음
  • 보통 < - 를 많이 사용함

2. 함수 호출 시 인자 지정

  • R명령의 대부분은 함수 호출
  • ex) Data(a, b, c=3 , d = 4
    • a, b, c, d 4개의 인자 지정
    • c, d, 에는 기본값이 지정되었으므로 생략 가능

3. 스칼라

숫자

  • 스칼라 : 단일 차원의 값(1,2,3,…)
  • R의 기본 데이터 타입은 벡터
  • 스칼라 데이터는 길이가 1인 벡터(즉, 길이가 1인 배열)
  • 숫자
    • 정수, 부동소수 등을 숫자형 데이터 타입 형식 지원

NA와 NULL

  • NA : 변수 값을 모를 때 사용(NULL과 구분해서 사용)
    • is.na() : na 값이 있는지 확인
  • NULL : NULL 객체를 뜻함
    • 변수가 초기화되지 않았을 때 사용
    • is.null() : null 값이 저장되어 있는지 확인

문자열

  • 문자열 : C 등의 언어에서 볼 수 있는 한 개 문자에 대한 데이터 타입(int, char,…이 없음)
    • 문자열로 모든 것 표현이 가능함
    • ‘ ‘ 또는 “ “ 사용

진릿값

  • &(AND) , |(OR) ,!(NOT) 연산자 사용
  • TRUE, FALSE는 예약어(다른 값 할당 불가)
  • T, F는 각각 true와 false로 초기화되어 있는 전역변수
  • T에는 false 값 할당 가능
  • &, | 와 && , || 의 차이
    • 한 개의 경우는 벡터(배열) 끼리 연산할 때, 요소별로 계산
    • 두 개의 경우는 두 개의 진릿값끼리 연산하기 위함

c(T,T) & c(T,F)
c(T,T) && c(T,F)

팩터

  • 범주형 데이터(자료)를 표현하기 위한 데이터 타입
  • 범주형 데이터 : 사전에 정해진 특정 유형으로만 분류
    • 명목형 : 데이터 값의 크기 비교 불가
    • 순서형 : 값에 순서를 둘 수 있음
  • 레벨(level) : 범주형 변수가 담을 수 있는 값의 목록
    • 예) 방의 크기를 대, 중, 소 로 나타낼 때,
    • 특정 방의 크기를 ‘대’로 나타내는 것 → 범주형 데이터
    • 대,중,소 → 레벨

팩터 관련 함수

  • factor : 팩터 값 생성
  • nlevels : 레벨의 개수 반환
  • levels : 레벨의 종류 반환
  • is.factor : 팩터 인지 판단
  • ordered : 순서형 팩터 생성
  • is.ordered : 순서형 팩터인지 판단

f <- factor("s",c("s","t"))
f
nlevels(f)
levels(f)
ordered("x",c("x","y","z"))

 

4. 벡터

벡터 생성하기

  • 배열의 개념
  • 한 가지 스칼라 데이터 타입의 데이터 저장 가능
  • 각 셀에 이름을 부여하여 이름을 통한 접근 가능
  • 벡터는 중첩이 불가능
    • 벡터 안에 벡터를 생성하면 단일 차원의 벡터로 변경

벡터 관련 함수

  • c : 벡터 생성
  • names : 객체 이름 반환
  • names ← : 객체 이름 저장

a <- c(10,20,30)
names(a) <- c("a","b","c")
a

데이터 접근

  • 벡터 데이터 접근 문법
    • x[n] : 벡터 x의 n번째 요소(n은 숫자 또는 이름)
    • x[-n] : n번째 요소 제외한 나머지
    • x[start:end] : start부터 end까지의 값
  • 벡터 길이 관련 함수
    • length : 객체의 길이를 반환
    • NROW : 배열의 행 또는 열의 수 반환

벡터 연산자

  • value %in% x : 벡터 x에 value가 저장되어 있는지 판단
  • x+n : 벡터 x의 모든 요소에 n의 값 더함 (*, / , - 등 사용 가능)

"x" %in% c("x","y","z")

 

시퀀스 생성

  • 생성 문법
    • seq(from, end , by) : from부터 end까지의 숫자를 지정한 벡터 반환
    • by는 생략 가능(기본값 1)
    • start : end 축약 형태로 사용 가능.

seq(1,5)
seq(1,5,2)
seq(5,1)

반복된 값 저장

  • 생성 함수
    • rep(x, times, each)
    • tiems : 전체 벡터의 반복 횟수
    • each : 개별 값의 반복 횟수

rep(1:2, tiems = 4)
rep(1:2 , each = 3)
rep(1:2 , each = 2 , times = 2)

5. 리스트

리스트 생성

  • 리스트 : (키 , 값) 형태의 데이터를 담는 연관 배열
    • 다른 언어에서 딕셔너리 형태
  • 벡터와 달리 값이 서로 다른 데이터 타입 담을 수 있음
    • “이름” 키에 “홍길동”(문자열)
    • “학번” 키에 20182711(숫자)

생성 함수

  • list(key1 = value1 , key2 = value2,…)
lst <- list(names = "data" , num = c(10,20,30))
lst

6. 행렬

행렬 생성

  • 생성 함수
    • matrix(데이터, 행의 수(nrow), 열의 수(ncol) , byrow = F, dimnames = NULL)
    • byrow를 TRUE로 설정하면 행우선, FALSE일 경우 열 우선
    • 생략할 시에는 FALSE로 간주
matrix(c(10,20,30,40),nrow = 2)
matrix(c(10,20,30,40))

a <- matrix(1:4 ,ncol = 2)
rownames(a) # 이름이 없으므로 NULL 반환
rownames(a) <- c("one","two")
a
colnames(a) <- c("one","two")
a

행 우선으로 지정하여 행렬 생성하기

matrix(c(1:9),nrow = 3 , byrow = T)

 

행과 열에 명칭 부여하기

matrix(c(1:9),nrow=3,dimnames = list(c("A","B","c"),c("D","E","F")))

데이터 접근

  • 문법
    • A[ridx cidx] : 행렬 A의 ridx행, cidx열에 저장된 값.
    • 이때 ridx나 cidx에 벡터를 사용해 여러 값을 지정 가능함
    • ridx나 cidx 중 하나를 생략하면 전체 행 또는 열 의미
a <- matrix(c(1:9),nrow = 3 , byrow = T)
a
a[1,2]
a[3,1]
a[,1:2]
a[1:2,]

행렬 연산

  • 연산자
    • A + x : 행렬 A의 모든 값에 스칼라 x 더함(-,*,/ 이용가능)
    • A + B : 행렬 A와 행렬 B의 합. 행렬 간의 차는 -
    • A%*%B : 행렬 A와 B의 곱
a <- matrix(c(1:9),nrow = 3)
a
a*3
a%*%a
a-a

7. 배열

배열 생성

  • 생성 함수
    • array(data = NA , dim = length(data), dimmames = NULL)
      • data : data를 저장한 벡터
      • dim=length(data) : 배열의 차원 / 지정하지 않으면 1차원 배열임
      • dimnames : 차원의 이름
array(11:20,dim = c(2,5)) # 2X5 차원의 배열

8. 데이터프레임

데이터프레임 생성

  • 데이터 프레임 : 처리할 데이터를 엑셀의 스프레드시트와 같이 표 형태로 정리
    • data.farme : 데이터 프레임 생성
    • str : 임의의 R 객체의 내부 구조(structure)를 보임
  • 데이터 프레임 사용 문법

a <- data.frame(x = c(1,2,3,4,5) , y = c(6,7,8,9,10),z = c("a","b","c","d","e"))
a
str(a)

이미 정의된 프레임에 값 변경하기

a$x
a$x <- 11:15
a

 

새로운 컬럼 추가하기

a$w <- c(1:5)
a

 

행, 컬럼 이름 지정하기

colnames(a) <- c("num1","num2","num3","num4")
a
rownames(a) <- c(11:15)
a

프레임에 접근하기

a
a[2,]
a[2,1]
a[-2,-2]
a[,c("num1","num2")]

drop 옵션 사용 (형 변환 원치 않을 때)

특정 컬럼 선택하기

a <- data.frame(x = 1:3 , y = 4:6  , z = 7:9)
a
a[,names(a) %in% c("y","x")]

연산자 사용 해서 특정 컬럼 제외하고 선택하기

a[,!names(a) %in% c("x")]

  • 데이터 프레임에는 분석할 데이터 양이 많음
  • 따라서, 손쉽게 살펴보는 방법이 필요
  • 유틸리티 함수 제공

head : 객체 처음 부분 반환

tail : 객체의 뒷부분 반환

View : 데이터 뷰어를 호출

  • 3가지 호출 방식의 출력 예시
a <- data.frame(x = 0:100)
head(a)
tail(a)
head(a,8L)
View(a)

 

9. 타입 판별

  • 데이터 처리를 위해 여러 함수 호출 시, 반환된 결과의 타입이 무엇인지 분명하지 않음
  • 타입 판별을 통해 데이터 타입을 손쉽게 판단 가능
  • 타입 판별 함수

클래스 구하기

데이터 타입 판별하기

10. 타입 변환

  • R의 형 변환은 암시적으로 발생할 수 있음
  • 때에 따라 전혀 예상치 못한 곳에서 형 변환 일어남
    • ex) 파일에서 문자열을 불러들였을 때 data.frame()으로 데이터 프레임을 생성하면서 stringAsFactor = FALSE를 지정하지 않으면 문자열이 character(문자열 벡터)가 아니라 팩터가 된다

타입 변환 함수

문자열 벡터를 팩터로 변환 후, 다시 벡터로 변환하기

행렬을 데이터 프레임으로 변환하기

리스트를 데이터 프레임으로 변환하기