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")) | 리스트 |
함수 | 함수 |
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) |
'2022 하계 모각코 캠프 (ADsP)' 카테고리의 다른 글
[모각코] 8/10 통계분석의 이해 (0) | 2022.08.11 |
---|---|
[모각코] 8/6 3과목 3장 실전 문제 풀기 - 오답노트 (0) | 2022.08.07 |
[모각코] 7/30 2과목 실전 문제 풀기 (0) | 2022.07.31 |
[모각코] 7/27 데이터 분석(3과목) + 스몰토크 (0) | 2022.07.28 |
[모각코] 7/23 데이터 분석 기획 (2과목) (0) | 2022.07.23 |