데이터 분석/R 오류처리

[R] Error in data.frame(..., check.names = FALSE) : arguments imply differing number of rows: 오류 처리

love R 2021. 3. 20. 14:42
반응형

1. Error in data.frame(..., check.names=FALSE) 에러 원인

 

이 오류의 원인은 데이터프레임을 열별로 병합할 때 일어나는 오류입니다.

즉, 두 데이터프레임의 관측치 개수가 맞지 않기 때문입니다.

 

# 아래처럼 관측치가 4개인 자료를 a에 할당하고 관측치가 5개인 자료를 b에 할당합니다.

a  <-  data.frame(a=c(1,2,3,4))
b  <-  data.frame(b=c(10,20,30,40,50))

하지만 a는 4개의 관측치, b에는 5개의 관측치가 존재합니다.

 

 

2. 에러 해결방법

# a 데이터와 b 데이터를 열별로 합치고 싶을 때 cbind 함수를 사용합니다.

cbind(a,b) # cbind: 데이터프레임을 열별로 병합해주는 함수
Error in data.frame(..., check.names=FALSE) : arguments imply differing number of rows: 4,5

cbind함수를 실행 결과 각 관측치의 수가 다르기 때문에 에러가 나왔습니다.

따라서 각 데이터의 관측치를 4개 또는 5개로 서로 같게 맞추어야 하기 때문에 a에서 행을 추가하거나 b에서 행을 삭제해야 합니다.

 

 

 

3. 각 데이터의 관측치가 다를 때 병합방법

위에서 cbind함수를 쓸 때는 각 관측치의 개수가 같게 되는 것이 필수적입니다.

하지만 a, b의 관측치가 서로 다를 때에도 병합하는 방법이 있습니다.

 

이 때는 cbind 함수가 아니라 merge 함수를 써야 합니다.

merge 함수는 어떤 변수를 기준으로 병합하는 방법입니다.

따라서 그 기준을 정하기 위해 열을 하나 더 추가해야 합니다.

 

a[,'id'] <- 1:nrow(a) # id라는 변수에 1부터 4까지 저장
b[,'id'] <- 1:nrow(b) # id라는 변수에 1부터 5까지 저장

merge(a, # a데이터
         b, # b데이터
         by='id',  # id라는 변수를 기준으로 병합
         all.y=TRUE) # b 데이터를 기준으로 관측치 개수가 결정됨. 즉 결과는 5개의 행으로 구성된 데이터프레임 반환

 

위와 같이 merge함수를 이용하게 되면 서로 관측치 개수가 달라도 병합할 수 있습니다.

이때는 a변수에 NA가 추가되어 관측치를 5개로 동일하게 맞춰 줍니다.

 

 

반대로 a를 기준으로 병합하고 싶다면 아래와 같이 합니다.

반응형