본문 바로가기

R

R 데이터프레임(DF) Select Column Distinct

R에서 lm(linear regression)와 같은 분석을 할 경우 해당 데이터프레임 종속변수(관측변수)를 제외한 값이 모두 동일할 경우가 있다. 이와 같은 데이터프레임을 체크 확인하는 방법을 알아보자.


우선 샘플 데이터프레임을 생성하자

model.df <- data.frame(
  VALUE1   = c(0,0,0,0),
  VALUE2   = c(11500,11500,11500,11500),
  VALUE4  = c(28,28,28,28) ,
  VALUE5  =  c(2700,2700,2700,2700) ,
  PRICE  =  c(6562238,6030590,6562238,4980528) 
)


생성한 데이터를 확인해보면 아래와 같다.

  VALUE1 VALUE2 VALUE4 VALUE5   PRICE
1      0  11500     28   2700 6562238
2      0  11500     28   2700 6030590
3      0  11500     28   2700 6562238
4      0  11500     28   2700 4980528

회귀분석할 종속변수 PRICE 값 이외는 모두 동일함을 알 수 있다.


이때 동일 유무를 확인할 수 있는 방법은 아래와 같다.

row.distinct.count <- length(levels(as.factor(rowMeans(model.df))))


데이터를 rowMeans함수로 평균을 구한 값들을 levels함수로 갯수를 알아내고 있다.

위 함수를 순차적으로 실행한 결과는 아래와 같다.

> rowMeans(model.df)
[1] 1315293.2 1208963.6 1315293.2  998951.2
> levels(as.factor(rowMeans(model.df)))
[1] "998951.2"  "1208963.6" "1315293.2"
> length(levels(as.factor(rowMeans(model.df))))
[1] 3

결국 해당 데이터프레임의 반복되는 값의 level갯수는 3건 이상이다.


여기서 문제는 분석할 대상의 종속변수 PRICE가 포함되어 있음이다.

PRICE값을 제외할 필요가 있다.

그렇다면 위 코드를 아래와 같이 수정할 필요가 있다.

row.distinct.count <- length(levels(as.factor(data.frame(c=rowMeans(  model.df[,!(names(model.df) %in% c('PRICE'))]   ))$c)))


PRICE컬럼을 제거하는 코드가 추가되었다.

위 함수를 순차적으로 실행한 결과는 아래와 같다.

> model.df[,!(names(model.df) %in% c('PRICE'))]
  VALUE1 VALUE2 VALUE4 VALUE5
1      0  11500     28   2700
2      0  11500     28   2700
3      0  11500     28   2700
4      0  11500     28   2700
> data.frame(c=rowMeans(  model.df[,!(names(model.df) %in% c('PRICE'))]   ))$c
[1] 3557 3557 3557 3557
> levels(as.factor(data.frame(c=rowMeans(  model.df[,!(names(model.df) %in% c('PRICE'))]   ))$c))
[1] "3557"
> length(levels(as.factor(data.frame(c=rowMeans(  model.df[,!(names(model.df) %in% c('PRICE'))]   ))$c)))
[1] 1

종속변수 PRICE를 제외하고는 데이터가 모두 동일함을 알 수 있다.

그러므로 해당 데이터는 분석 대상에서 제외할 필요가 있다고 판단할 수 있다.


'R' 카테고리의 다른 글

R evel함수활용 : String Source Code Execute  (2) 2014.01.17
R 데이터프레임(DF) Select Column  (0) 2014.01.17
R 데이터프레임(DF) Group By Sum  (2) 2013.12.20