Programming Language/etc
[R.입문] R 자료구조 - 리스트와 데이터프레임
김크리
2021. 10. 6. 21:11
목차
리스트
리스트는 R에서 다양한 객체를 원소로 가질 수 있는 자료구조이다. 데이터프레임, 리스트 및 함수도 원소로 가질 수 있다.
- 광범위하게 사용 되는 자료구조
- 인덱싱 시 대괄호 두개 = [[]]를 사용한다.
- 리스트 원소엥 이름이 있으면 $ 기호를 사용하여 해당 원소를 선택할 수 있다.
리스트 생성
list() 함수를 사용하여 원소를 나열하여 리스트를 생성할 수 있다.
list(원소명 = 원소1, 원소명2 = 원소2,...)
# 리스트 생성
num <- seq(from=1, to =10, by=2)
cha <- rep(x=c('a','b'),each=3)
lst1<-list(num, cha)
print(x=lst1)
class(x=lst1)
# list 의 구조 확인
str(object=lst1)
#원소명이 붙은 리스트 생성
lst2 <- list(a=num, b=cha, c=lst1)
print(x=lst2)
class(x=lst2)
str(object=lst2)
리스트 원소 선택
리스트의 원소를 선택할 때 겹대괄호([[]])와 $를 사용할 수 있다.
특정 리스트의 이름 뒤에 $ 기호를 붙이는 순간 해당 리스트에 대한 원소를 선택할 수 있다.
#리스트 원소 선택
lst1$a
lst2$b
lst1[[1]]
# 2개 이상을 동시에 선택할 수 없다.
lst2[[1,3]]
lst2[1]
# 해당 위치의 원소를 리스트로 반환한다.
lst2[c(1,3)]
리스트 원소 추가 및 삭제
인덱시을 이용하여 새로운 원소를 추가/삭체할 수 있다. $ 기호 뒤에 새로운 원소명을 지정하여 원소로 추가할 객체를 할당한다.
#리스트 원소 추가
lst2$d <- 1:5
str(object=lst2)
#리스트 원소 삭제
lst2&a <- NULL
str(object = lst2)
리스트 원소 변경
리스트의 원소를 변경할 때 $를 이용하여 리스트 인덱싱을 이용한다.
#리스트 원소 변경
#통째로 변경가능능
lst2$b <- letters[1:5]
print(x=lst2$b)
#원소만 변경 가능
lst2$b[1] <- 'A'
print(x=lst2$b)
데이터프레임
R은 엑셀 문서인 xls, xlsx 파일이나 텍스트 문서인 csv 파일을 데이터 프레임으로 생성한다. 이는 가장 R에서 많이 사용하게 되는 자료구조라고 할 수 있다.
데이터프레임 생성
data.frame() 함수를 사용하여 데이터프레임을 생성한다. data.frame() 함수 안에 열벡터를 콤마(,)로 나열한다. 열 벡터마다 열이름을 붙일 수 있으며, 열 이름과 열 벡터를 등호(=)로 연결한다.
data.frame(열이름1=열벡터1, 열이름2 = 열벡터2,...)
#데이터 프레임 생성
num <- seq(from=1, to=10, by=2)
chr <- rep(x=c('a','b'),each=3)
# 길이가 다른 값으로 데이터프레임 생성 불가능
df2 <- data.frame(num,chr)
cha <- letters[1:5]
df1 <- data.frame(num, cha)
print(x=df1)
# 데이터프레임 구조와 값 확인
str(object = df1)
# R언어가 가지고 있는 다양한 옵션 사용가능
#max.print는 기본값이 1000이다. 출력할 수 있는 최대 벡터원소이다.
options('max.print')
# 데이터프레임을 시각화한다.
View(x=df1)
데이터프레임 원소 선택
특정 위치에 저장된 원소를 선택하는데 대괄호를 사용하고 , 대괄호 안에 콤마를 추가한다.
#인덱싱으로 선택하기
df1[1,1]
df1[1:2, 1:2]
df1[1,]
df1[1:2,]
#문자형 벡터로 열 선택하기
df1[,'num']
df1[,c('num','cha')]
#열 이름으로 열 선택하기
df1$num
df1$cha
#true/false 로 반환하기
df1$num >= 5
df1[df1$num >= 5,]
df1[df1$num >= 5, 'cha']
df1$cha[df1$num >= 5]
데이터프레임 원소 추가
새로 벡터를 추가할때 리스트와 같이 $ 기호로 추가할 열이름을 지정하고 원하는 벡터를 할당하는 방식을 사용한다.
#원소 추가하기
df1$int <- 11:15
str(object = df1)
#열 추가하기
cbind(df1, rep(x=TRUE, times=5))
cbind(df1, log= rep(x=TRUE, times=5))
df1<-cbind(df1, log=rep(x=TRUE, times=5))
str(object = df1)
# 행 추가하기
df3 <- data.frame(num=6, cha='f',int=16, log=TRUE)
print(df3)
rbind(df1, df3)
str(object = df1)
데이터프레임 원소 삭제
#열 벡터 삭제
df1$num <-NULL
str(object = df1)
#인덱싱 삭제
df1[-1,-1]
df1[-1,]
df1[,-1]
데이터프레임 원소 변경
#데이터프레임 원소 변경
#LETTERS 는 대문자
df1$cha <- LETTERS[1:5]
print(x=df1)
df1$int[1] <- '11'
str(object = df1)
참고
나성호의 R 데이터 분석 입문 도서
https://github.com/HelloDataScience/DAwR