데이터 프레임 업데이트 방법 data.frame update

    데이터 프레임에도 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


위와 같은 경우에는 부분적으로 업데이트 한 것이다.    만약에 같은 종류의 업무인데 조직이 매우 크고,  다루는 품목이 다를 경우에는  통계 모형이나  로직을 부분적으로 바뀌어야 할때가 많다. 

댓글 없음:

댓글 쓰기

css cheat sheet 클래스 선택자, margin(마진), display , center 조정 간단한 구성 요소

 앞에서는 html의 간단한 sheet를 소개 하였습니다.   html은  주로 골격을 나타나는 것이라, 디자인을 하는데는 css로 하여야 합니다.  아래 코드와 같이 css 관련 하여 매우 간단하게 코딩 하겠습니다.  body 부분의 css 코딩  ...