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(data = NA , dim = length(data), dimmames = NULL)
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(문자열 벡터)가 아니라 팩터가 된다