본문 바로가기

R

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

R에서 lm(linear regression)와 같은 분석을 할 경우 해당 데이터프레임에서 제외할 컬럼이 있을 수 있다.

만약 컬럼내의 값이 모두 같으면 분석 대상에서 제외해야 한다.

제외하지 않고 lm분석을 할 경우 에러를 발생시킨다.


분석할 데이터프레임에서 분석 대상이 되는 컬럼만 선택하거나 분석 대상에서 제외되는 컬럼을 제거하는 방법을 알아 보자.


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

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


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

  VALUE1 VALUE2 VALUE3 VALUE4 VALUE5  VALUE6
1      0  11500     NA     28   2700 6562238
2      0  11500     NA     28   2700 6030590
3      0  11500     NA     28   2700 6562238
4      0  11500     NA     28   2700 4980528

여기서 NA가 있는 컬럼 VALUE3를 제거 해보자.

model.df.select <- model.df[,!(names(item.df) %in% 'VALUE3')] 

여기서 조건절만 따로 실행해보면 아래와 같은 실행 결과를 얻을 수 있다.

컬럼별로 조건을 비교하여 BOOLEAN값으로 리턴하게 되며 그 값을 토대로 컬럼을 제거 하게 된다.

> (names(item.df) %in% 'VALUE3')
[1] FALSE FALSE  TRUE FALSE FALSE FALSE

그렇다면 하나의 컬럼이 아닌 VALUE1, VALUE3 다중 컬럼을 제거 하는 방법은 아래와 같다.

out.col <- c('VALUE1', 'VALUE3')
model.df.select <- model.df[,!(names(item.df) %in% out.col)] 

그럼 잘 제거가 되었는지 확인해보자.

  VALUE2 VALUE4 VALUE5  VALUE6
1  11500     28   2700 6562238
2  11500     28   2700 6030590
3  11500     28   2700 6562238
4  11500     28   2700 4980528

필요 없는 컬럼이 잘 제거 되었음을 확인할 수 있다.


제거하는 방법 이외에 다수의 컬럼에서 필요한 컬럼만 가져오는 방법은 

위 R코드에서 조건절 ! 만 제거 해주면 된다.

out.col <- c('VALUE1', 'VALUE3')
model.df.select <- model.df[,(names(item.df) %in% out.col)] #! 제거
  VALUE1 VALUE3
1      0     NA
2      0     NA
3      0     NA
4      0     NA

필요한 컬럼만 선택됨을 확인할 수 있다.



그렇다면 VALUE1과 같은 수치가 0인 컬럼을 제거하려면 어떻게 해야 할까?

colSums 함수를 이용하여 제거할 수 있다.

우선 colSums함수를 사용하기 위해서는 VALUE3과 같은 NA데이터를 변경할 필요가 있다.

여기서는 NA데이터를 0으로 변경하고자 한다.

model.df$VALUE3[ is.na(model.df$VALUE3) ] <- 0
model.df.select <- model.df[, !colSums(model.df) == 0 ]

그럼 잘 제거가 되었는지 확인해보자.

  VALUE2 VALUE4 VALUE5  VALUE6
1  11500     28   2700 6562238
2  11500     28   2700 6030590
3  11500     28   2700 6562238
4  11500     28   2700 4980528

이와 같이 데이터프레임에서 필요한 혹은 필요없는 컬럼을 제거 후 분석을 진행 할 수 있다.

 

'R' 카테고리의 다른 글

R 데이터프레임(DF) Select Column Distinct  (0) 2014.01.17
R 데이터프레임(DF) Group By Sum  (2) 2013.12.20
R 데이터프레임(DF) 조건 검색  (1) 2013.12.02