R을 활용하여 일반적인 데이터 일치 문제 해결

18002 단어 R필기
데이터 일치 문제
때때로 우리는 두 표 사이를 어느 필드의 이름에 따라 일치시켜야 한다. 만약에 데이터 양이 만 단위에 이르면 R은 효율적인 해결 방안을 제공한다. 다음은 성적표를 예로 들어보자.
> ###      
> #     
> name <- c("  ","  ","  ","  ","  ","  ","  ","  ")
> chinese <- c(88,55,56,89,58,65,75,56)
> english <- c(89,48,57,78,29,68,89,64)
> cj_data <- data.frame(name,chinese,english)
> name_data <- data.frame(name)
> cj_data1 <- cj_data[1:3,]
> cj_data2 <- cj_data[4:5,]
> cj_data3 <- cj_data[6:8,]
> name_data
  name
1   
2   
3   
4   
5   
6   
7   
8   
> cj_data1
  name chinese english
1         88      89
2         55      48
3         56      57
> cj_data2
  name chinese english
4         89      78
5         58      29
> cj_data3
  name chinese english
6         65      68
7         75      89
8         56      64

다음은 dplyr 패키지의leftjoin 함수는 이름에 따라 다음과 같은 두 가지 상황으로 나뉜다
  • 일대일 일치
  • > library(dplyr)
         :‘dplyr’
    > cj_one <- left_join(name_data,cj_data,by="name")
    > cj_one
      name chinese english
    1         88      89
    2         55      48
    3         56      57
    4         89      78
    5         58      29
    6         65      68
    7         75      89
    8         56      64
    
  • 일대다 일치(이하 두 가지 상황으로 나뉜다)
  •  ###          
    > ##1.      
    > cj_hb <- rbind(cj_data1,cj_data2,cj_data3)
    > cj_hb
      name chinese english
    1         88      89
    2         55      48
    3         56      57
    4         89      78
    5         58      29
    6         65      68
    7         75      89
    8         56      64
    > cj_sec <- left_join(name_data,cj_hb,by="name")
    > cj_sec
      name chinese english
    1         88      89
    2         55      48
    3         56      57
    4         89      78
    5         58      29
    6         65      68
    7         75      89
    8         56      64
    > ##2.      
    > cj_th1 <- left_join(name_data,cj_data1,by="name")
    > cj_th2 <- left_join(name_data,cj_data2,by="name")
    > cj_th3 <- left_join(name_data,cj_data3,by="name")
    > cj_th1
      name chinese english
    1         88      89
    2         55      48
    3         56      57
    4         NA      NA
    5         NA      NA
    6         NA      NA
    7         NA      NA
    8         NA      NA
    > cj_th2
      name chinese english
    1         NA      NA
    2         NA      NA
    3         NA      NA
    4         89      78
    5         58      29
    6         NA      NA
    7         NA      NA
    8         NA      NA
    > cj_th3
      name chinese english
    1         NA      NA
    2         NA      NA
    3         NA      NA
    4         NA      NA
    5         NA      NA
    6         65      68
    7         75      89
    8         56      64
    > #           
    > cj_th1 <- na.omit(cj_th1)
    > cj_th2 <- na.omit(cj_th2)
    > cj_th3 <- na.omit(cj_th3)
    > cj_th1
      name chinese english
    1         88      89
    2         55      48
    3         56      57
    > cj_th2
      name chinese english
    4         89      78
    5         58      29
    > cj_th3
      name chinese english
    6         65      68
    7         75      89
    8         56      64
    > cj_th <- rbind(cj_th1,cj_th2,cj_th3)
    > cj_th
      name chinese english
    1         88      89
    2         55      48
    3         56      57
    4         89      78
    5         58      29
    6         65      68
    7         75      89
    8         56      64
    

    아주 간단하지 않습니까? 만약 당신이 매우 큰 데이터를 처리할 때 R을 이용해서 해결할 수 있습니다.

    좋은 웹페이지 즐겨찾기