2022

[R데이터분석] 리스트, 데이터프레임

HAPAGO 2022. 4. 24. 22:23

리스트와 데이터 프레임

리스트는 1차원 데이터인 벡터나 서로 다른 구조의 데이터를 그룹으로 묶은 데이터세트, 서로 다른 데이터 유형 저장 가능

데이터프레임은 제일 많이 쓰는 형태, 리스트를 2차원으로 확대한 것

행렬 형태로 되어 있고 비슷하지만 숫자, 문자등 데이터유형을 섞을 수 있다.

list()

list1 <- list(c(1, 2, 3), "Hello") list1

[[1]] [1] 1 2 3

[[2]] [1] "Hello"

str(list1)

List of 2 #두 가지 변수로 구성된 리스트 $ : num [1:3] 1 2 3 $ : chr "Hello"

R에서 대괄호는 인덱스(index)를 의미, 인덱싱

리스트에서는 대괄호를 겹쳐서 데이터의 위치를 표현,

리스트의 첫 번째 변수를 호출하기

list1[[1]]

[1] 1 2 3

#리스트1 생성

list1 <- list(name = 'James Seo', address = 'seoul', tel = '010-8706-4712', pay = 500)

list1

$name <-- Key 부분

[1] "James Seo" <-- Value 부분

$address

[1] "Seoul"

$tel [1] "010-8706-4712"

$pay [1] 500

#list1$name #특정 key 값만 조회하기 :

list1 의 $name 키 조회

list1$name

[1] "James Seo"

#행1부터 2까지 조회

list1[1:2]

$name[1] "James Seo"

$address[1] "seoul"

 

#List 에 새로운 요소 추가/삭제하기

list1$birth<- '1975-10-23'

<-- 생일을 추가함

list1

$name

[1] "James Seo"

$address [1] "Seoul"

$tel [1] "010-8706-4712"

$pay [1] 500

$birth

[1] "1975-10-23" <-- 추가됨

 

#하나의 key 에 두개의 value 동시에 넣기

list1$name <- c('Seojinsu', 'James Seo')

list1$name

[1] "Seojinsu" "James Seo"

list1$birth <- NULL

#무시됨: 안나타남

list1

$name

[1] "Seojinsu" "James Seo"

$address

[1] "Seoul"

$tel

[1] "010-8706-4712"

$pay

[1] 500

 

 

 


 

데이터프레임

데이터 프레임은 실제 업무에서 가장 많이 사용하는 데이터세트로 숫자형 벡터, 문자형 벡터 등 서로 다른 형태의 데이터를 묶을 수 있는 다중형 데이터 세트

행렬과 유사해보이지만 데이터프레임의 각 열에는 변수명이 있어야 함

엑셀의 데이터 구조와 매우 유사

data.frame(변수명1, 변수명2, ...변수명n)

 

벡터로부터 데이터 프레임 생성하기

no <- c(1,2,3,4)

name <- c('Apple','Peach','Banana','Grape')

price <- c(500,200,100,50)
qty <- c(5,2,4,7) 

sales <- data.frame(NO=no,NAME=name,PRICE=price,QTY=qty)
sales

  NO NAME PRICE QTY
1 1 Apple 500 5
2 2 Peach 200 2
3 3 Banana 100 4
4 4 Grape 50 7

데이터 프레임 합치기 - rbind( ) , cbind( ) , merge( )사용하기

no <- c(1,2,3)

name <- c('apple','banana','peach')

price <- c(100,200,300)

df1 <- data.frame(NO=no,NAME=name,PRICE=price)

df1

  NO NAME PRICE

1 1 apple 100

2 2 banana 200

3 3 peach 300

 

no <- c(10,20,30)

name <- c('train','car','airplane')

price <- c(1000,2000,3000)

df2 <- data.frame(NO=no,NAME=name,PRICE=price)

df2

NO NAME PRICE

1 10 train 1000

2 20 car 2000

3 30 airplane 3000

 

합치기

df3 <- cbind(df1,df2)

df3

 

df4 <- rbind(df1,df2)

df4

 NO NAME PRICE

1 1 apple 100

2 2 banana 200

3 3 peach 300

4 10 train 1000

5 20 car 2000

6 30 airplane 3000

 

 NO NAME PRICE NO NAME PRICE

1 1 apple 100 10 train 1000

2 2 banana 200 20 car 2000

3 3 peach 300 30 airplane 3000

 

df1 <- data.frame(name=c('apple','banana','cherry'), + price=c(300,200,100))

df2 <- data.frame(name=c('apple','cherry','berry'), + qty=c(10,20,30))

df1

   name price

1 apple 300

2 banana 200

3 cherry 100

 

df2

  name qty

1 apple 10

2 cherry 20

3 berry 30

 

#df1 기준으로 df2 와 공통으로 있는 name 컬럼 데이터를 출력함

merge(df1,df2)

name price qty

1 apple 300 10

2 cherry 100 20

 

#데이터가 없는 것도 모두 나오게 all=T 옵션 지정

merge(df1,df2,all=T)

  name price qty

1 apple 300 10

2 banana 200 NA <-- df2 에 banana 가 없어서 NA 로 출력 되었습니다.

3 cherry 100 20

4 berry NA 30 <--df1 에 berry 가 없어서 NA 로 출력 되었습니다

 

#df1 과 df2 를 합쳐서 하나의 데이터프레임으로 만듦

cbind(df1,df2)

name price name qty

1 apple 300 apple 10

2 banana 200 cherry 20

3 cherry 100 berry 30

cbind(df2,df1)

name qty name price

1 apple 10 apple 300

2 cherry 20 banana 200

3 berry 30 cherry 100

 

 

df1

name price

1 apple 300

2 banana 200

3 cherry 100

#추가할 내용을 생성

new <- data.frame(name="mango",price=400)

rbind 로 행을 추가

df1 <- rbind(df1,new)

df1

  name price

1 apple 300

2 banana 200

3 cherry 100

4 mango 400

#이렇게도 가능

df1 <- rbind(df1,data.frame(name="berry",price=500))

df1

name price

1 apple 300

2 banana 200

3 cherry 100

4 mango 400

5 berry 500

 

#열 추가하기

df1 <- cbind(df1,data.frame(qty=c(10,20,30,40,50)))

df1

name price qty

1 apple 300 10

2 banana 200 20

3 cherry 100 30

4 mango 400 40

5 berry 500 50

 

#데이터 프레임에서 특정 컬럼들만 골라내서 새로운 형태 만들기

no <- c(1,2,3,4,5)

name <- c("서진수","주시현","최경우","이동근","윤정웅")

address <- c("서울","대전","포항","경주","경기")

tel <- c(1111,2222,3333,4444,5555)

hobby <- c("독서","미술","놀고먹기","먹고놀기","노는애감시하기")

member <- data.frame(NO=no,NAME=name, ADDRESS=address,TEL=tel,HOBBY=hobby)

member

   NO NAME ADDRESS TEL HOBBY

1 1 서진수 서울 1111 독서

2 2 주시현 대전 2222 미술

3 3 최경우 포항 3333 놀고먹기

4 4 이동근 경주 4444 먹고놀기

5 5 윤정웅 경기 5555 노는애감시하기

 

#특정컬럼만 지정 subset( , select=c())

member2 <- subset(member,select=c(NO,NAME,TEL))

 NO NAME TEL

1 1 서진수 1111

2 2 주시현 2222

3 3 최경우 3333

4 4 이동근 4444

5 5 윤정웅 5555

 

#특정 컬럼만 제외 subset( , select= - )

member3 <- subset(member,select= -TEL)

 NO NAME ADDRESS HOBBY

1 1 서진수 서울 독서

2 2 주시현 대전 미술

3 3 최경우 포항 놀고먹기

4 4 이동근 경주 먹고놀기

5 5 윤정웅 경기 노는애감시하기

 

#데이터 프레임의 내용 확인 및 출력 순서 지정하기

 

데이터 프레임 생성하기

ID <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

GENDER <- c("F", "M", "F", "M", "M", "F", "F", "F", "M", "F")

AGE <- c(50, 40, 28, 50, 27, 23, 56, 47, 20, 38)

AREA <- c("서울", "경기", "제주", "서울", "서울", "서울", "경기", "서울", "인천", "경기")

dataframe_ex <- data.frame(ID, GENDER, AGE, AREA) dataframe_ex

 ID GENDER AGE AREA

1 1 F 50 서울

2 2 M 40 경기

3 3 F 28 제주

4 4 M 50 서울

5 5 M 27 서울

6 6 F 23 서울

7 7 F 56 경기

8 8 F 47 서울

9 9 M 20 인천

10 10 F 38 경기

 

변수 속성 확인

str(dataframe_ex)

'data.frame': 10 obs. of 4 variables:

$ ID : num 1 2 3 4 5 6 7 8 9 10

$ GENDER : chr "F" "M" "F" "M" ...

$ AGE : num 50 40 28 50 27 23 56 47 20 38

$ AREA: chr "서울" "경기" "제주" "서울" ...

 

#관측치가 10개이고 변수가 4개인 데이터프레임 생성됨

#obs: 관측치 observation 각 변수에 들어있는 관측치의 갯수는 같아야 한다.