데이터 프레임에도 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 "지민" 5040 90 95 ## 6 "민재" 35 45 95 100 ## 7 "서연" 100 90 95 100 ## 8 "민수" 87 95 95 90 ## 9 "수빈" 1040 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 "지민" 5540 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 "지민" 5540 90 95 ## 6 "민재" 35 45 95 100 ## 7 "서연" 100 90 95 100 ## 8 "민수" 87 95 95 90 ## 9 "수빈" 2040 30 50 ## 10 "서현" 50 30 20 60
위와 같은 경우에는 부분적으로 업데이트 한 것이다. 만약에 같은 종류의 업무인데 조직이 매우 크고, 다루는 품목이 다를 경우에는 통계 모형이나 로직을 부분적으로 바뀌어야 할때가 많다.
 
 
 
댓글 없음:
댓글 쓰기