본문 바로가기

데이터 분석/R

[R] R 데이터 종류 #3 - 데이터프레임(Data Frame)

R의 데이터 종류에는 스칼라, 벡터, 리스트, 행렬, 배열, 데이터 프레임이 있다. 이번 포스팅에는 데이터프레임를 알아보자.

 

[데이터프레임]


데이터 프레임은 데이터 유형에 상관없이 2차원 형태의 데이터 구조를 말한다. 벡터, 행렬로 만들 수 있다.

 

 

 

[벡터로 데이터 프레임을 만든 예제]

num <- c(1,2,3)
name <- c("Lee","Kim","Park")
score <- c(100,90,80)

df = data.frame(num,name,score)
df
#   num name score
# 1   1  Lee   100
# 2   2  Kim    90
# 3   3 Park    80

data.frame()을 사용하여 데이터 프레임을 만든다. 

데이터 프레임안에 길이가 동일한 벡터를 넣어주면된다. 벡터의 이름은 컬럼명이 된다.

 

 

v1 <- c(1,2,3)
v2 <- c("Lee","Kim","Park")
v3 <- c(100,90,80)

df = data.frame(num=v1,name=v2,score=v3)
df
#   num name score
# 1   1  Lee   100
# 2   2  Kim    90
# 3   3 Park    80


# colnames()를 사용해서 이름 바꾸기
colnames(df) <- c("one","two","three") 
df
#    one  two three
# 1   1  Lee   100
# 2   2  Kim    90
# 3   3 Park    80

 data.frame()에서 칼럼명을 지정할 수 있고 colnames()를 사용해서도 칼럼명을 지정할 수 있다.

 

 

 

[행 이름 바꾸기]

v1 <- c("one","two","three")
v2 <- c("Lee","Kim","Park")
v3 <- c(100,90,80)

df = data.frame(v1,v2,v3)

rownames(df) <- df[,1] # 첫번째 컬럼을 행 이름으로 사용
df[,-1] # 첫번째 컬럼 제거
#         v2  v3
# one    Lee 100
# two    Kim  90
# three Park  80

 

 

 

[데이터 프레임 접근]

v1 <- c(1,2,3)
v2 <- c("Lee","Kim","Park")
v3 <- c(100,90,80)

df = data.frame(num=v1,name=v2,score=v3)
df
#   num name score
# 1   1  Lee   100
# 2   2  Kim    90
# 3   3 Park    80

df$name # [1] "Lee"  "Kim"  "Park"

df[1,] # 첫번째 행 가져옴
#   num name score
# 1   1  Lee   100

df[c(1,3),] # 1,3번째 행 가져옴
#    num name score
# 1   1  Lee   100
# 3   3 Park    80

df[df$score == 100, ] # score가 100인 행만 가져옴
#    num name score
# 1   1  Lee   100

 

 

 

[merge를 사용하여 데이터 프레임 병합하기]

# merge : 두 개 이상의 data.frame을 병합
height <- data.frame(id=c(1,2,2),h=c(180,175,178))
weight <- data.frame(id=c(1,2,3),w=c(80,75,88))
height
#   id   h
# 1  1 180
# 2  2 175
# 3  2 178
weight
#   id  w
# 1  1 80
# 2  2 75
# 3  3 88

merge(height,weight) # inner join 과 비슷
#   id   h  w
# 1  1 180 80
# 2  2 175 75
# 3  2 178 75

merge(height,weight, by.x = "id") # id를 기준으로 병합 , 위와 같음
#   id   h  w
# 1  1 180 80
# 2  2 175 75
# 3  2 178 75

merge(height,weight, by.x = "id", by.y = "id")
#   id   h  w
# 1  1 180 80
# 2  2 175 75
# 3  2 178 75

df <- merge(height,weight,all=T) # outer join과 비슷
df
#   id   h  w
# 1  1 180 80
# 2  2 175 75
# 3  2 178 75
# 4  3  NA 88