(15주차) 12월16일
데이터프레임, 티블
-
(1/3) 데이터프레임, 티블 (1)
-
(2/3) 데이터프레임, 티블 (2)
-
(3/3) 기말고사관련 설명
library(tidyverse)
-
방법1: 선언하여 만들기 (새롭게 정의)
tibble(v1=1:3, v2=c(T,F,T), v3=c('a','b','c'))
- 각 열들의 자료형이 모두 달라도 가능 (티블의 매력)
- 티블의 형태는 매트릭스 같지만 이처럼 다른 자료형이 들어가는 것은 리스트를 연상시킴
-
방법2: 선언하여 만들기2 (기존에 정의된 벡터들을 활용)
x=1:5
y=c('a','b','c','d','e')
tibble(x,y)
tibble(v1=x,v2=y)
-
방법3: 벡터나 매트릭스를 만들고 그것을 티블로 변형
as_tibble(x)
as_tibble(cbind(x,y))
- 모든 컬럼이 chr로 저장되는 단점이 있음
-
방법4: 리스트를 만들고 그것을 티블로 변형
as_tibble(list(x=x,y=y))
as_tibble(list(v1=x,v2=y))
-
데이터프레임의 경우도 티블과 비슷하게 만들 수 있다.
- as_tibble 대신 data.frame
- tibble 대신 data.frame
data.frame(v1=1:3, v2=c(T,F,T), v3=c('a','b','c'))
data.frame(x,y)
data.frame(v1=x,v2=y)
data.frame(x)
data.frame(cbind(x,y))
data.frame(list(x=x,y=y))
data.frame(list(v1=x,v2=y))
-
tibble()과 data.frame()의 결과가 다를수도 있음
lst = list(x=x,y=y,z=cbind(x,y))
lst
data.frame(lst)
as_tibble(lst)
-
데이터프레임과 티블은 as_tibble()과 data.frame()을 이용하여 서로의 형태로 변환가능하다.
data.frame(v1=1:3, v2=c(T,F,T), v3=c("a","b","c"))
data.frame(v1=1:3, v2=c(T,F,T), v3=c("a","b","c")) %>% as_tibble
data.frame(v1=1:3, v2=c(T,F,T), v3=c("a","b","c")) %>% as_tibble %>% data.frame
즉 아래가 가능함
df= data.frame(v1=1:3, v2=c(T,F,T), v3=c("a","b","c"))
df
df=as_tibble(df)
df
df=data.frame(df)
df
-
매트릭스: (1) 모든 열은 동일한 숫자의 row를 가져야하며 (2) 행렬의 모든 원소는 동일한 자료형을 가져야 함
-
리스트: (1) 모든 원소가 동일한 길이의 오브젝트로 구성될 필요가 없다. (2) 그리고 리스트의 각 원소가 동일한 자료형을 가질 필요도 없다.
-
티블 혹은 데이터프레임은
- 자료형이 자유로운 매트릭스로 해석할 수 있고
- 모든 원소가 동일한 길이의 오브젝트로 구성된 리스트
로 생각할 수 있다.
-
데이터셋팅
x = 1:3
y = c(T,F,T)
z = c('a','b','c')
lst = list(x=x,y=y,z=z)
mat = cbind(x,y,z)
df = tibble(x=x,y=y,z=z)
print(lst)
print(mat)
print(df)
-
df에서 열들의 이름을 알고 싶다.
print(colnames(lst))
print(colnames(mat))
print(colnames(df))
print(names(lst))
print(names(mat))
print(names(df))
-
df에서 첫번째 열을 추출하고 싶다?
mat[,1]
#lst[,1]
df[,1]
lst[[1]]
df[[1]]
-
df를 매트릭스처럼 생각하는건 사실 직관적이지만 리스트라고는 생각하기 어렵다. df를 리스트라고 해석하면 아래와 같은 문법들도 쉽게 이해가능하다.
lst[1]
df[1]
lst$x
df$x
lst['x']
df['x']
lst[1:2]
df[1:2]
-
매트릭스처럼 생각한다면 아래와 같은 형태도 가능하다.
mat[2:3,]
df[2:3,]
mat[,1:2]
df[,1:2]
mat[,'x']
df[,'x']
mat[,c('x','y')]
df[,c('x','y')]
mat[2:3,c('x','y')]
df[2:3,c('x','y')]