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
반응형
'개발관련 > other' 카테고리의 다른 글
본문 스크롤을 방지하지만 오버레이 스크롤은 허용 (0) | 2021.11.23 |
---|---|
스크립트가 웹 사이트를 공격하지 못하도록 막는 방법 (0) | 2021.11.23 |
.NET에서 줄 바꿈으로 문자열을 분할하는 가장 쉬운 방법 (0) | 2021.11.22 |
npm 패키지에서 "at"(@) 접두어의 의미 (0) | 2021.11.22 |
LINQ에서 GroupBy 여러 열을 수행하는 방법 (0) | 2021.11.19 |