반응형
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: 데이터프레임을 열별로 병합해주는 함수 |
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를 기준으로 병합하고 싶다면 아래와 같이 합니다.
반응형