본문 바로가기

2022 하계 모각코 캠프 (ADsP)

[모각코] 8/3 Day 12~14 (3과목)

4절. 데이터 구조와 데이터 프레임 - 1

1. 벡터

→ 벡터는 동질적이다

: 한 벡터의 모든 원소는 같은 자료형 또는 같은 모드를 가짐

 

→ 벡터는 위치로 인덱스 된다

→ 벡터는 인덱스를 통해 여러 개의 원소로 구성된 하위 벡터를 반환할 수 있다

: V[c(2, 3)]은 v벡터의 2번쨰, 3번째 원소로 구성된 하위벡터

 

→ 벡터 원소들은 이름을 가질 수 있다

2. 리스트

→ 리스트는 이질적이다

: 여러 자료형의 원소들이 포함될 수 있음

 

→ 리스트는 위치로 인덱스 된다

 

→ 리스트에서 하위 리스트를 추출할 수 있다

 

→ 리스트의 원소들은 이름을 가질 수 있다

3. R에서의 자료 형태

객체 예시 모드
숫자 3.14 수치형
숫자 벡터 c(1, 2, 3, 4) 수치형
문자열 "Tom" 문자형
문자열 벡터 c("Tom", "Yoon") 문자형
요인 factor(c("A", "B", "C")) 수치형
리스트 list("Tom", "Yoon") 리스트
데이터 프레임 data.frame(x=1:3, y=c("Tom", "Yoon")) 리스트
함수 print 함수

4. 데이터 프레임

 

→ 특징?

: 강력하고 유연한 구조, SAS의 데이터 셋 모방

: 데이터 프레임의 리스트의 원소는 벡터 또는 요인

: 그리고 그 벡터와 요인은 데이터 프레임의 열

: 벡터와 요인들은 동일한 길이

: 데이터 프레임은 표 형태의 데이터 구조이며, 각 열은 서로 다른 데이터 형식을 가질 수 있음

: 열에는 이름이 있어야 함

 

→ 데이터 프레임의 원소에 대한 접근법

b[1]; b["empno"]
	b[[i]]; b[["empno"]]
    b$empno

 5. 그 밖의 데이터 구조들

 

→ 단일값(Scalars)

:R에서는 원소가 하나인 벡터로 인식/처리

 

 

→ 행렬(Matrix)

:R에서는 차원을 가진 벡터로 인식

 

 

→ 배열(Arrays)

: 행렬에 3차원 또는 n차원까지 확장된 형태

: 주어진 벡터에 더 많은 차원을 부여하여 배열을 생성

 

→ 요인(Factors)

: 벡터처럼 생겼지만, R에서는 벡터에 있는 고유갑스이 정보를 얻어내는데, 이 고유값들을 요인의 수준(level)이라고 함

: 요인의 두 가지 주된 사용처로 범주형 변수, 집단 분류가 있음

6. 벡터, 리스트, 행렬 다루기

: 행렬은 R에서 차원을 가진 벡터이며, 텍스트마이닝과 소셜네트워크 분석 등에 활용함

: 재활용 규칙은 길이가 서로 다른 두 벡터에 대해 연산을 할 때, R은 짧은 벡터의 처음으로 돌아가 연산이 끝날때까지 원소들을 재활용 함

4절. 데이터 구조와 데이터 프레임 - 2

1. 데이터 프레임

 

기능 R코드 비고
데이터 프레임 data.frame(벡터, 벡터, 벡터) 벡터들로 데이터 셋생성
레코드 생성 new <- data.frame(a=1, b=2, c=3, d="a") 레코드 생성 시 숫자, 문자를 함께 사용 가능
열 데이터(변수)로 데이터 프레임 만들기 dfm<-data.frame(v1,v2,v3,v4)
dfm<-as.data.frame(list.of.vectors)
 
데이터셋 행 결합 rbind(dfrm1, dfrm2)
newdata<-rbind(newdata, new)
두 데이터 프레임을 행으로 결합
데이터 셋 열 결합 cbind(dfrm1, dfrm2)
cbind(newdata, newcol)
두 데이터 프레임을 열로 결합
데이터 프레임 할당 N=1,000,000
dtfm<data.frame(dosage=numeric(N),
lab=character(N), respones=numeric(N))
 
데이터 프레임 조회1 dfrm[dfrm$gender="m"] 데어터셋 내 성별이남성만 조회
데이터 프레임 조회2 dfrm[dfrm$변수1>4 & dfrm$변수2>5,
c(변수3, 변수4)]
데이터 셋의 변수1과 변수2의 조건에 만족하는 레코드의 변수3과 변수4만을조회
데이터 프레임 조회3 dfrm[grep("문자", dfrm$변수1,
ignore.case=T), c("변수2", "변수3")
데이터셋의 변수1 내 "문자"가 들어 있는 케이스들의 변수2, 변수3 값을 조회

2. 자료형 데이터 구조 변환

기능 R코드
데이터 프레임의 내용에 쉽게 접근하기 with(dfm, expr)
attach(dfm)
detach(dfm)
자료형 변환하기 as.character()
as.complex()
as.numeric(), as.double()
as.interger()
as.logical()
데이터 구조 변환하기 as.data.frame()
as.list()
as.matrix()
as.vector()

3. 데이터 구조 변경

벡터 → 리스트 as.list(vec) 행렬 → 벡터 as.vector(mat)
벡터 → 행렬 1열짜리 행렬:
cbind(vec), as.matrix(vec)
1행짜리 행렬:
rbind(vec)
nXm 행렬: matrix(vec,n,m)
행렬 → 리스트 as.list(mat)
벡터 → 데이터 프레임 1열짜리 데이터 프레임:
as.data.frame(vec)
1행짜리 데이터 프레임:
as.data.frame(rbind(vec))
행렬 → 데이터 프레임 as.data.frame(mat)
리스트 → 벡터 unlist(lst) 데이터 프레임 → 벡터 1열짜리 데이터 프레임:
dfm[[1]] or dfm[,1]
1행짜리 데이터 프레임:
dfm[1,]
리스트 → 행렬 1열짜리 행렬:
as.matrix(lst)

1행짜리 행렬:
as.matrix(rbind(lst))
nXm 행렬:
matrix(lst, n, m)
데이터 프레임 → 리스트 as.list(dfm)
리스트 → 데이터 프레임 목록 원소들이 데이터의 열:
as.data.frame(lst)
리스트의 원소들이 데이터의 행:
rbind(obs[[1]],obs[[2]]
데이터 프레임 → 행렬 as.matrix(dfm)

4. 벡터의 기본 연산

 

기능 R코드 비고
벡터 연산 +-*^  
함수적용 sapply(변수, 연산함수)
sapply(a,log)
연산 및 적용 함수를 통해 변수에 적용
파일 읽기 read.csv(변수이름, "파일이름.csv")  
파일 불러오기 load("a.R")
source("a.R")
R 파일 불러오기
데이터 삭제 rm(변수)
rm(list=Is(all=TRUE))
변수를 메모리에서 삭제
모든 변수를 메모리에서 삭제

 

 

5절. 데이터 변형

1. 주요 코드

기능 R코드 비고
벡터를 여러 집단으로 분할 groups<-split(v, f)
groups<-split(w, f)
groups<-unstack(data.frame(v,f))
두 함수 모두 벡터로 된 리스트를 반환
데이터 프레임을 여러 집단으로 분할 library(MASS)
sp<-split(Cars$MPG.city, Cars93$origin)
median(sp[[1]])
 
리스트의 각 원소에 함수 적용 list<-lapply(l, func)
vec<-sapply(l, func)
행렬에 함수 적용 m<-apply(mat, 1, func)
m<-apply(mat, 2, func)
데이터 프레임에 함수 적용 dfm<-lapply(dfm,func)
dfm<-sapply(dfm,func)
대용량 데이터의 함수적용 cors<-sapply(dfm,cor,y=targetVariable)
mask<-(rank(-abs(cors))<=10)
best.pred<-dfm[,mask]
lm(targetVariable~bes.pred)
많은 변수가 있는 데이터에서의 다중회귀분석
집단별 함수 적용 tapply(vec, factor, func) 데이터가 집단(factors)에 속해 있을 때 합계/평균 구하기
행집단 함수 적용 by(drm, factor, func)  

 2. 문자열 날짜 다루기

 

기능 R코드 비고
문자열 길이 nchar("단어") 단어나 문장 또는 백터내 원소의 문자열 길이를 반환
[주의] length(vec)는 문자열의 길이가 아닌 벡터의 길이를 반환
문자열 연결 paste("a", "b", sep="-")  
하위 문자열 추출 substr("Hello", 1, 4) 문자열의 1부터 4자리까지 추출
구분자로 문자열 추출 strsplit(문자열, 구분자)  
하위 문자열 대체 sub(old, new, string)
gsub(old, new, string)
 
쌍별 조합 mat<-outer(문자열1, 문자열2, paste, sep="")  
날짜 변환1 Sys.Date()
as.Date()
현재 날짜를 반환
날짜 객체로 반환
날짜 변환2 format(Sys.date(), format=%m/%d/%y)