59doit

[ R ] DataFrame 자료구조 본문

Programming/R

[ R ] DataFrame 자료구조

yul_S2 2022. 11. 15. 12:44
반응형

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 생성

emp.txt
0.00MB

 

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 생성

 

emp.csv
0.00MB
emp2.csv
0.00MB

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
Comments