59doit
[ R ] DataFrame 자료구조 본문
DataFrame 자료구조
- R에서 가장 많이 쓰는 자료구조 DB의 테이블 구조와 유사
- 컬럼 단위로 서로 다른 데이터형의 저장이 가능
- 컬럼은 리스트, 컬럼 내 데이터는 벡터 구조
- DataFrame 생성함수 : data.frame(), read.table(), read.csv()
- DataFrame 자료 처리 함수 : str(), ncol(), nrow(), apply(), summary(), subset()
(1) data.frame 객체 생성
ex ) 벡터 이용 data.frame 생성
no <- c(1, 2, 3) name <- c("hong", "lee", "kim") pay <- c(150, 250, 300) vemp <- data.frame(No = no, Name = name, Pay = pay) vemp # No Name Pay # 1 1 hong 150 # 2 2 lee 250 # 3 3 kim 300 |
- c()함수 이용
- 컬럼 길이는 동일해야 함
ex ) matrix 이용 data.frame 생성
m <- matrix( c(1, "hong", 150, 2, "lee", 250, 3, "kim", 300), 3, by = T) memp <- data.frame(m) memp # X1 X2 X3 # 1 1 hong 150 # 2 2 lee 250 # 3 3 kim 300 |
- matrix()함수 이용
ex ) text파일 이용 data.frame 생성
txtemp <- read.table('C:/emp.txt', header = 1, sep = "") txtemp # 사번 이름 급여 # 1 101 hong 150 # 2 201 lee 250 # 3 301 kim 300 |
- read.table()함수: 텍스트 파일을 읽어 data.frame 생성
ex ) csv파일 이용 data.frame 생성
csvtemp <- read.csv('C:/emp.csv', header = T) csvtemp # no name pay # 1 101 홍길동 150 # 2 102 이순신 450 # 3 103 강감찬 500 # 4 104 유관순 350 # 5 105 김유신 400 name <- c("사번", "이름", "급여") read.csv('C:/emp2.csv', header = F, col.names = name) # 사번 이름 급여 # 1 101 홍길동 150 # 2 102 이순신 450 # 3 103 강감찬 500 # 4 104 유관순 350 # 5 105 김유신 400 |
- read.csv()함수: csv파일을 읽어 data.frame 생성
ex ) data.frame 만들기
df <- data.frame(x = c(1:5), y = seq(2, 10, 2), z = c('a', 'b', 'c', 'd', 'e')) df # x y z # 1 1 2 a # 2 2 4 b # 3 3 6 c # 4 4 8 d # 5 5 10 e |
ex ) data.frame 컬럼명 참조
df$x # [1] 1 2 3 4 5 |
- $ 사용 : 변수명$컬럼명
(2) data.frame 객체 자료 처리 함수
str(), summary(), apply() 함수
ex ) data.frame의 자료구조( 열 수, 행 수, 칼럴명 보기 )
str(df) # 'data.frame': 5 obs. of 3 variables: # $ x: int 1 2 3 4 5 # $ y: num 2 4 6 8 10 # $ z: chr "a" "b" "c" "d" ... ncol(df) # [1] 3 nrow(df) # [1] 5 names(df) # [1] "x" "y" "z" df[c(2:3), 1] # [1] 2 3 |
- str() 함수: data.frame의 구조 보여준다.
ex ) 요약통계량
summary()함수: 최소값, 최대값, 중위수, 평균, 사분위수값을 요약하여 보여준다.
summary(df) # x y z # Min. :1 Min. : 2 Length:5 # 1st Qu.:2 1st Qu.: 4 Class :character # Median :3 Median : 6 Mode :character # Mean :3 Mean : 6 # 3rd Qu.:4 3rd Qu.: 8 # Max. :5 Max. :10 |
ex ) 함수 적용
apply()함수
apply(data.frame, 행/열, 함수)
where 행: 1, 열: 2
apply(df[ , c(1, 2)], 2, sum) # x y # 15 30 |
ex ) data.frame의 부분객체
subset() 함수: data.frame()에서 조건에 만족하는 행을 추출하여 독립된 객체인 subset 생성
/ 변수 <-subset(data.frame, 조건)
x1 <- subset(df, x >= 3) x1 # x y z # 3 3 6 c # 4 4 8 d # 5 5 10 e |
ex ) 2개의 조건 이용 부분 객체 만들기
y1 <-subset(df, y<=8) xyand <- subset(df, x<=2 & y <=6) xyor <- subset(df, x<=2 | y <=0) y1 # x y z # 1 1 2 a # 2 2 4 b # 3 3 6 c # 4 4 8 d xyand # x y z # 1 1 2 a # 2 2 4 b xyor # x y z # 1 1 2 a # 2 2 4 b |
ex ) student data.frame 만들기
sid = c("A", "B", "C", "D") score = c(90, 80, 70, 60) subject = c("컴퓨터", "국어국문", "소프트웨어", "유아교육") student <- data.frame(sid, score, subject) student # sid score subject # 1 A 90 컴퓨터 # 2 B 80 국어국문 # 3 C 70 소프트웨어 # 4 D 60 유아교육 |
ex ) 자료형과 자료구조 보기
mode(student); class(student) # [1] "list" # [1] "data.frame" str(sid); str(score); str(subject) # chr [1:4] "A" "B" "C" "D" # num [1:4] 90 80 70 60 # chr [1:4] "컴퓨터" "국어국문" "소프트웨어" "유아교육" str(student) # 'data.frame': 4 obs. of 3 variables: # $ sid : chr "A" "B" "C" "D" # $ score : num 90 80 70 60 # $ subject: chr "컴퓨터" "국어국문" "소프트웨어" "유아교육" |
ex ) 두 개 이상의 data.frame 병합
# 단계 1: 병합할 데이터프레임 생성 height <- data.frame(id = c(1, 2), h = c(180, 175)) weight <- data.frame(id = c(1, 2), w = c(80, 75)) # 단계 2: 데이터프레임 병합하기 user <- merge(height, weight, by.x = "id", by.y = "id") user # id h w # 1 1 180 80 # 2 2 175 75 |
(3) data.frame 객체 데이터 셋
ex ) galton 데이터 셋
install.packages("UsingR") library(UsingR) data(galton) |
ex ) galton 데이터 셋 구조
str(galton) # 'data.frame': 928 obs. of 2 variables: # $ child : num 61.7 61.7 61.7 61.7 61.7 62.2 62.2 62.2 62.2 62.2 ... # $ parent: num 70.5 68.5 65.5 64.5 64 67.5 67.5 67.5 66.5 66.5 ... dim(galton) # [1] 928 2 head(galton, 15) # child parent # 1 61.7 70.5 # 2 61.7 68.5 # 3 61.7 65.5 # 4 61.7 64.5 # 5 61.7 64.0 # 6 62.2 67.5 # 7 62.2 67.5 # 8 62.2 67.5 # 9 62.2 66.5 # 10 62.2 66.5 # 11 62.2 66.5 # 12 62.2 64.5 # 13 63.2 70.5 # 14 63.2 69.5 # 15 63.2 68.5 |
'Programming > R' 카테고리의 다른 글
[ R ] 연습문제 (2) (0) | 2022.11.16 |
---|---|
[ R ] List 자료구조 & 문자열처리 (0) | 2022.11.16 |
[ R ] Matrix & Array 자료 구조 (0) | 2022.11.15 |
[ R ] vector 자료구조 (0) | 2022.11.15 |
[ R ] 함수사용 (0) | 2022.11.14 |