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 |