데이터 분석/R 오류처리

[R] Error in rbind(deparse.level, ...) : numbers of columns of arguments do not match

love R 2021. 4. 30. 00:00
반응형

1. Error in rbind(deparse.level, ...) : numbers of columns of arguments do not match 에러 원인

 

두 개의 데이터프레임을 행별 병합시 rbind 함수를 씁니다.

이 때, 이 데이터프레임의 열 숫자가 동일하지 않기 때문에 일어나는 에러입니다.

 

test_a <- data.frame(a=c(1,2,3),b=c(4,5,6))
test_b <- data.frame(a=c(11,22,33),b=c(44,55,66),z=c(77,88,99)) 
rbind(test_a,test_b) 
Error in rbind(deparse.level,...) : numbers of columns arguments do not match

 

2. 에러 해결방법

test_a에는 두 개의 열이 있고 test_b에는 세 개의 열이 있는 데이터프레임이 생성되었습니다.

즉 열의 개수가 맞지 않기 때문에 위와 같은 오류가 납니다.

이를 해결하기 위해서 열 개수를 같게 맞추어야 하기 때문에 열 개수를 2나 3으로 맞춰줍니다.

병합 시에 주의할 점은 두 데이터프레임의 열명(column name)이 같아야 합니다!

 

# 열 개수를 두 개로 맞춤,
test_bb <- data.frame(a=c(11,22,33),b=c(44,55,66))
rbind(test_a, test_bb)


 


# 열 개수를 세 개로 맞춤
test_aa <-  data.frame(a=c(1,2,3),b=c(4,5,6), z=c(100,200,300))
rbind(test_aa, test_b)


# 만약 test_aa의 열명과 test_b의 열명이 같지 않다면 아래 오류가 나옵니다!
names(test_aa) <- c('a','b','zzz') 
rbind(test_aa,test_b)
Error in match.names(clabs, names(xi)) : names do not match previous names

 

 

위에서 두 데이터의 열명이 다르면 병합이 안되는 오류가 나왔었죠

현재 test_aa 에는 'a', 'b', 'zzz' 라는 열명이 저장되어 있고

test_b에는 'a', 'b', 'z' 라는 열명이 저장되어 있습니다.

그런데 각 데이터프레임에 존재하지 않는 열명을 결측치 처리하여 결과를 보여줄 수도 있습니다.

 

# dplyr 패키지가 설치되어 있지 않으면 install.packages("dplyr")을 실행하여 설치합니다.

library(dplyr) 
bind_rows(test_aa, test_b)



# 만약 어떤 데이터끼리 합쳐졌는지 구분을 하고 싶다면 bind_rows에서 .id 인자를 추가합니다.
# 첫 열에 1과 2로 구분되어 어떤 데이터끼리 병합되었는지 알 수 있습니다.

bind_rows(test_aa, test_b, .id='group_number')

 

 

반응형