본문 바로가기
my_lesson/_R_컴퓨팅

R_컴퓨팅 - 데이터의 구조[3] 리스트 데이터프레임

by boolean 2019. 2. 12.
728x90

R_컴퓨팅 - 데이터의 구조[3] 리스트  데이터프레임

리스트

리스트 생성

행렬과 배열 등이 동일한 형태의 원소로 이루어진 객체인 반면 리스트를 구성하는 성분(component)은 서로 다른 형태의 원소를 가질 수 있고, 길이도 다를 수 있다.

속성 

설명 

length 

자료의 개수 

mode 

자료의 형태 

names 

각 구성요소의 이름 



Exam:

list() 함수를 이용하여 두개의 벡터와 한개의 문자열을 가진 리스트를 생성하고 속성울 출련 하라.
Solution:
>a <- 1:10
>b <- 11:15
>klist <- list(vec1=a, vec2 = b, descrip="example")    # 리스트 생성
>length(klist)

리스트 추출

특정한 성분을 추출하거나 성분 내의 특정원소를 추출하려면 아래와 같은 연산자를 사용

-[[ ]] 를 사용하여 리스트에서의 성분을 추출
-성분의 이름이 부여되었다면 $연산자로 구분됨
-[ ] 연산자를 사용하여 성분 내의 특정 원소를 추출

Exam:
list() 함수를 이용하여 "A"라는 문자와 1에서 8까지의 원소를 갖는 벡터를 성분으로 하는 list1이라는 리스트를 생성하라.
list1의 세번째 성분으로 논리값 T, F를 갖는 벡터를 추가하라
두 번째 성분의 아홉 번째 원소로 9를 추가하라.
Solution:
>list1<- list("A", 1:8)
>list1[[3]] <- list(c(T, F))    # 세번째 성분을 추가
>list1[[2]][9] <-9    #두 번째 성분에 9번째 원소 추가
>list1[[3]] <- NULL    # 세번째 성분 삭제
>lest1[[2]] <- list1[[2]][-9]    # 두번째 성분 9번째 원소를 삭제하라


Exam:
1에서 10까지의   원소를 갖는 벡터 a와 11에서 15까지의 원소를 갖는 벡터 b를 생성하라.
벡터 a, 벡터 b, "example"이라는 문자와 함께 nlist르는 리스트를 생성하라
Solution:
>a <- 1:10
>b <- 11:15
>nlist <- list(vec1 = a, vec2 = b, descrip="example")
>nlist[[2]][5]    # 두번째 성분 5번째 원소
>nlist$vec2[5]     #두번째 성분 5번째 원소
>nlist$vec2[c(2,3)]     #두번째 성분 두번째 원소와 세번째 원소


데이터프레임

행렬은 차원으로 표시되며 같은 형태의 객체를 가지는 반면, 데이터 프레임은 각 열들이 서로 다를 형태의 객체를 가질 수 있다.


데이터 프레임은 형태( mode)가 일반화된 행렬(matrix)

데이터 프레임이라는 하나의 객체에 여러 종류의 자료가 들어갈 수 있다.

데이터 프레임의 각 열은 각각 변수와 대응

분석이나 모형 설정에 잡합한 자료 객체이다.


Exam:

데이터가 다음과 같이 작성되어 "d:/story.txt"에 저장되어 있다고 가정하자

read.table() 함수를 이용하여 이 파일을 읽어보자


num 

name 

age 

sex 

Lee 

55 

Park 

47 

So 

35 

4

Kim 

26 

Yoon 

29 


Solution:

>d2 <- read.table("d:/story.txt", row.names = "num", header = T)


데이터 프레임 생성


Exam:

문자형 벡터 char1과 수치형 벡터 num1을 생성하라

두 벡터를 결합하여 test1이라는 데이터 프레임을 만들어라

Solution:

>char1 <- rep(LETTERS[1:3], c(2,2,1))   # "A" "A" "B" "B"  "C"

>num1 <- rep(1:3, c(2,2,1))     # 1 1 2 2 3

>test1 <- data.frame(char1, num1)



Exam:

문자 a부터 o까지로 이루어진 벡터를 생성하라

이를 5행3열의 행렬로 변환한 되 a1으로 저장하고 데이터 프레임으로 변환

Solution:

>a1 <- c(letters[1:15])     # 알파벳 a 부터 o까지 입력

>dim(a1) < - c(5,3)

>test3 <- as.data.frame(a1)     # a1을 데이터 프레임으로 변환


데이터 프레임 결합

서로 다른 데이버 프레임을 생성하였다면, 여러 데이터 프레임을 합하여 하나의 데이터 프레임으로 생성할 수 있음

데이터 프레임을 합치는 방법에는 아래와 같은 함수가 사용됨

-cbind() 함수를 이용하여 옆으로 합치기
-rbind() 함수를 이용하여 아래로 합치기
-merge()함수를 이용하여 병합하기


Exam:
위의 test1 과 test3 데이터 프레임을 cbind()라는 함수를  이용하여 옆으로 합쳐라
 test4라는 새로운 데이터 프레임을 생성하고 rbind()함수를 이용하여 test1과 test4를 아래로 합쳐라
Solution:
>cbind(test1, test3)

 

char1

num1

V1

V2

V3

1

A

1

a

f

k

2

A

1

b

g

l

3

B

2

c

h

m

4

B

2

d

i

n

5

C

3

e

j

o

>char1 <- rep(LETTERS[4:6], c(1,2,2)    # "D" "E" "E" "F" "F"

>num1 <- rep(4:6, c(1,2,2))     # 4 5 5 6 6

>test4 <- data.frame(char2, num2)

>rbind(test1, test4)     # 두 데이터 프레임간 변수(column)명이 일치 하지 않으면 행 결합 불가능

>merge(test1, test4)      # 같은 변수 끼리 값끼리 컴비네이션 한다.







댓글