R에서 두 데이터 프레임 결합

Gustavo du Mortier 2024년2월15일
  1. rbind를 사용하여 R에서 두 데이터 프레임 결합
  2. dplyr 패키지 사용
  3. R에서 빅 데이터 프레임 결합
R에서 두 데이터 프레임 결합

R 코드로 데이터를 조작 할 때 두 데이터 프레임을 하나로 결합해야하는 경우가 종종 있습니다. 이 튜토리얼에서는 R에서 두 데이터 프레임을 효율적으로 결합하는 몇 가지 방법을 살펴 봅니다.

일치하는 열이있는 두 개의 데이터 프레임xy가 있다고 가정합니다. 예를 들면 :

x <- data.frame(a=c(218, 415, 339), b=c(25, 19, 43), c=c(950, 872, 645))
y <- data.frame(a=c(309, 115), c=c(799, 814))

예를 들어 z라고하는 하나의 결과 데이터 프레임으로 결합해야합니다. 이러한 데이터 프레임은 다음과 같을 수 있습니다.

R 데이터 프레임 예

rbind를 사용하여 R에서 두 데이터 프레임 결합

rbind함수는 데이터 프레임, 벡터 또는 행렬과 같은 데이터 구조를 행별로 결합합니다. 이름은 행 바인딩을 나타냅니다.

rbind를 사용하여 두 데이터 프레임을 결합 할 때 두 데이터 프레임 모두 동일한 열을 가져야합니다. 따라서 이전 예에서는 데이터 프레임 yb열을 추가해야합니다. 다음 명령을 실행하여 수행 할 수 있습니다.

y$b <- NA

이제y 데이터 프레임은 다음과 같아야합니다.

R 데이터 프레임 예

이제rbind를 사용하여 다음 명령을 실행하여xy 데이터 프레임을 새로운z 데이터 프레임으로 결합 할 수 있습니다.

x <- data.frame(a=c(218, 415, 339), b=c(25, 19, 43), c=c(950, 872, 645))
y <- data.frame(a=c(309, 115), c=c(799, 814))

y$b <- NA

z <- rbind(x, y)

출력:

    a  b   c
1 218 25 950
2 415 19 872
3 339 43 645
4 309 NA 799
5 115 NA 814

dplyr 패키지 사용

rbind를 사용할 수 있도록 추가 코드 줄을 작성하거나 데이터 프레임 중 하나에 가상의 열을 추가하지 않으려면 dplyr 패키지를 만든 다음 간단히 다음을 사용하십시오.

z <- bind_rows(x, y)

z 데이터 프레임을xy의 조합으로 채 웁니다.

R에서 빅 데이터 프레임 결합

이전 예제는 몇 개의 행과 2 개 또는 3 개의 열이있는 작은 데이터 프레임에서 잘 작동합니다. 그러나 많은 행과 임의의 열이있는 빅 데이터 세트를 병합해야하는 경우 다음과 같이 작업을 더 빠르게 수행하는 함수를 작성하는 것이 좋습니다.

quickmerge <- function(df1, df2) {
  df1.names <- names(df1)
  df2.names <- names(df2)
  df2.add <- setdiff(df1.names, df2.names)
  df1.add <- setdiff(df2.names, df1.names)
  if(length(df2.add) > 0) {
    for(i in 1:length(df2.add)) {
      df2[df2.add[i]] <- NA
    }
  }
  if(length(df1.add) > 0) {
    for(i in 1:length(df1.add)) {
      df1[df1.add[i]] <- NA
    }
  }
  return(rbind(df1, df2))
}

이 기능은 데이터 프레임의 열 이름을 비교 한 다음 필요한 열을 추가하여 동일하게 만드는 것으로 시작합니다. 마지막으로rbind 함수를 사용하여 행을 결합하고 결과를 반환합니다. 함수를 호출하려면 다음을 사용합니다.

z <- quickmerge(x, y)

전체 예제 코드는 다음과 같습니다.

quickmerge <- function(df1, df2) {
  df1.names <- names(df1)
  df2.names <- names(df2)
  df2.add <- setdiff(df1.names, df2.names)
  df1.add <- setdiff(df2.names, df1.names)
  if(length(df2.add) > 0) {
    for(i in 1:length(df2.add)) {
      df2[df2.add[i]] <- NA
    }
  }
  if(length(df1.add) > 0) {
    for(i in 1:length(df1.add)) {
      df1[df1.add[i]] <- NA
    }
  }
  return(rbind(df1, df2))
}

x <- data.frame(a=c(218, 415, 339), b=c(25, 19, 43), c=c(950, 872, 645))
y <- data.frame(a=c(309, 115), c=c(799, 814))

z <- quickmerge(x, y)

print(z)

출력:

    a  b   c
1 218 25 950
2 415 19 872
3 339 43 645
4 309 NA 799
5 115 NA 814

관련 문장 - R Data Frame