데이터 프레임에도 sql 쿼리와 다르지만 업데이트 하는 것이 있다. 데이터 프레임에서 데이터 업데이트 할 케이스는 여러가지 케이스가 있는데, 예를 들자면, 수없이 많은 모델을 업데이트를 할 필요성이 있을때가 있다. 그런데, 바로 업데이트 하면 되는데, 데이터 프레임을 하나 더 만들어서, 업데이트 된 값은 join해서, 데이터를 대치 시킨다. 물론 부분적으로 데이터 업데이트 할 경우에는 더욱 더 많은 과정이 필요하다.
어찌 되었든 아래와 같은 방법을 잘 사용하면, 복잡한 작업이 간소화 된다.
1. dplyr 패키지 불러오고 Dataframe 만들기
# 데이터 베이스 업데이트 블로그
library(dplyr)
# 성적표 데이터 셋 만들기
df <- tibble(
이름 = c("우진", "예은 ", "지우", "현준", "지민", "민재",
"서연", "민수", "수빈", "서현") ,
수학 = c(90, 80, 85, 30, 50, 35, 100, 87, 10, 50),
물리 = c(100, 90, 95, 50, 40, 45, 90, 95, 40, 30),
영어 = c(40, 30, 50, 100, 90, 95, 95, 95, 30, 20),
중국어 = c(50, 45, 40, 90, 95, 100, 100, 90, 50, 60))
df
## # A tibble: 10 x 5 ## 이름 수학 물리 영어 중국어 ## <chr> <dbl> <dbl> <dbl> <dbl> ## 1 "우진" 90 100 40 50 ## 2 "예은 " 80 90 30 45 ## 3 "지우" 85 95 50 40 ## 4 "현준" 30 50 100 90 ## 5 "
지민" 50
40 90 95 ## 6 "민재" 35 45 95 100 ## 7 "서연" 100 90 95 100 ## 8 "민수" 87 95 95 90 ## 9 "
수빈" 10
40 30 50 ## 10 "서현" 50 30 20 60
2. 데이터 변경 테스트
위와 같이 점수를 바꿀 데이터는 "지민" 하고, "수빈" 데이터를 변경 하려고 한다.
아래와 같이 지민의 점수를 55점으로 바꾸어 보자.
데이터베이스 변경 테스트
df %>%
rows_update( tibble(이름 = "지민", 수학 = 55 ) )
## Matching, by = "이름"
## # A tibble: 10 x 5 ## 이름 수학 물리 영어 중국어 ## <chr> <dbl> <dbl> <dbl> <dbl> ## 1 "우진" 90 100 40 50 ## 2 "예은 " 80 90 30 45 ## 3 "지우" 85 95 50 40 ## 4 "현준" 30 50 100 90 ## 5 "
지민" 55
40 90 95 ## 6 "민재" 35 45 95 100 ## 7 "서연" 100 90 95 100 ## 8 "민수" 87 95 95 90 ## 9 "수빈" 10 40 30 50 ## 10 "서현" 50 30 20 60
지민이 55점으로 바뀐 것을 볼 수 있다.
3. 2개이상의 데이터 셋 업데이트
지민과, 수빈의 두사람의 수학점수를 바꾸려고 한다. 수학점수를 업데이트 하려면, 별도의 데이터 프레임을 만들어서, 업데이트 할 내용을 만들어야 한다. 일반적으로 모델을 변경 하거나 방법을 변경 할때, 별도의 데이터 프레임이 만들어 진다.
# 지민과 수빈의 수학 채점이 잘못되어 지민은 수학점수, 5점,
# 수빈은 수학점수 10점을 더 주었다고 가정 하자.
df_adj = tibble(
이름 = c("지민", "수빈"),
점수 = c( 55, 20 ))
그리고 데이터 프레임을 중심으로 루프문을 돌려 2개 이상의 데이터를 돌려서 업데이트 한다.
# 젓번째로 테스트 되었다. 그러면, 2개를 어떻게 해야 하는가?
for(i in 1:nrow(df_adj)){
name = df_adj$이름[i]
math = df_adj$점수[i]
df <- df %>%
rows_update(tibble(이름= name, 수학 = math))
}
## Matching, by = "이름"
## Matching, by = "이름"
# 성적이 변경 된 것 확인
df
## # A tibble: 10 x 5 ## 이름 수학 물리 영어 중국어 ## <chr> <dbl> <dbl> <dbl> <dbl> ## 1 "우진" 90 100 40 50 ## 2 "예은 " 80 90 30 45 ## 3 "지우" 85 95 50 40 ## 4 "현준" 30 50 100 90 ## 5 "
지민" 55
40 90 95 ## 6 "민재" 35 45 95 100 ## 7 "서연" 100 90 95 100 ## 8 "민수" 87 95 95 90 ## 9 "
수빈" 20
40 30 50 ## 10 "서현" 50 30 20 60
위와 같은 경우에는 부분적으로 업데이트 한 것이다. 만약에 같은 종류의 업무인데 조직이 매우 크고, 다루는 품목이 다를 경우에는 통계 모형이나 로직을 부분적으로 바뀌어야 할때가 많다.
댓글 없음:
댓글 쓰기