개발관련/other

[R] 하위 집합 데이터 프레임에서 사용하지 않는 요인 수준 삭제

Rateye 2021. 11. 22. 10:47
728x90
반응형
질문 : 하위 집합 데이터 프레임에서 사용하지 않는 요인 수준 삭제

factor 포함하는 데이터 프레임이 있습니다. subset 또는 다른 인덱싱 기능을 사용하여이 데이터 프레임의 하위 집합을 만들면 새 데이터 프레임이 생성됩니다. 그러나 factor 변수는 새 데이터 프레임에 존재하지 않는 경우에도 원래 수준을 모두 유지합니다.

이로 인해 패싯 플로팅을 수행하거나 요인 수준에 의존하는 함수를 사용할 때 문제가 발생합니다.

새 데이터 프레임의 요소에서 레벨을 제거하는 가장 간결한 방법은 무엇입니까?

예를 들면 다음과 같습니다.

df <- data.frame(letters=letters[1:5],
                    numbers=seq(1:5))

levels(df$letters)
## [1] "a" "b" "c" "d" "e"

subdf <- subset(df, numbers <= 3)
##   letters numbers
## 1       a       1
## 2       b       2
## 3       c       3    

# all levels are still there!
levels(subdf$letters)
## [1] "a" "b" "c" "d" "e"
답변

해야 할 일은 부분 집합 화 후 변수에 factor ()를 다시 적용하는 것입니다.

 subdf$letters
[1] a b c
Levels: a b c d e
subdf$letters <- factor(subdf$letters)
> subdf$letters
[1] a b c
Levels: a b c

편집하다

요인 페이지 예에서 :

factor(ff)      # drops the levels that do not occur

데이터 프레임의 모든 요인 열에서 수준을 삭제하려면 다음을 사용할 수 있습니다.

subdf <- subset(df, numbers <= 3)
subdf[] <- lapply(subdf, function(x) if(is.factor(x)) factor(x) else x)
출처 : https://stackoverflow.com/questions/1195826/drop-unused-factor-levels-in-a-subsetted-data-frame
728x90
반응형