Programing

요인 수준과 요인 레이블 간의 혼동

lottogame 2020. 9. 1. 07:56
반응형

요인 수준과 요인 레이블 간의 혼동


R에서 요인의 수준과 레이블간에 차이가있는 것 같습니다. 지금까지 저는 항상 수준이 요인 수준의 '실제'이름이고 레이블이 출력에 사용되는 이름이라고 생각했습니다 (예 : 표 및 그림). . 다음 예에서 볼 수 있듯이 분명히 이것은 사실이 아닙니다.

df <- data.frame(v=c(1,2,3),f=c('a','b','c'))
str(df)
'data.frame':   3 obs. of  2 variables:
 $ v: num  1 2 3
 $ f: Factor w/ 3 levels "a","b","c": 1 2 3

df$f <- factor(df$f, levels=c('a','b','c'),
  labels=c('Treatment A: XYZ','Treatment B: YZX','Treatment C: ZYX'))
levels(df$f)
[1] "Treatment A: XYZ" "Treatment B: YZX" "Treatment C: ZYX"

스크립팅 할 때 레벨 ( 'a', 'b', 'c')에 여전히 액세스 할 수 있다고 생각했지만 작동하지 않습니다.

> df$f=='a'
[1] FALSE FALSE FALSE

그러나 이것은 다음을 수행합니다.

> df$f=='Treatment A: XYZ' 
[1]  TRUE FALSE FALSE

그래서 내 질문은 두 부분으로 구성됩니다.

  • 레벨과 레이블의 차이점은 무엇입니까?

  • 스크립팅 및 출력을위한 요인 수준에 대해 다른 이름을 가질 수 있습니까?

배경 : 긴 스크립트의 경우 요소 수준이 짧은 스크립트가 훨씬 쉬워 보입니다. 그러나 보고서 및 그림의 경우이 짧은 요인 수준은 적절하지 않을 수 있으며 더 정확한 이름으로 대체해야합니다.


매우 짧음 : 레벨은 입력이고 레이블은 factor()함수 의 출력입니다 . 요소에는 함수 levellabels인수로 설정되는 속성 factor()있습니다. 이것은 SPSS와 같은 통계 패키지의 레이블 개념과 다르며 처음에는 혼란 스러울 수 있습니다.

이 코드 줄에서 수행하는 작업

df$f <- factor(df$f, levels=c('a','b','c'),
  labels=c('Treatment A: XYZ','Treatment B: YZX','Treatment C: ZYX'))

R에게 벡터가 있음을 알려줍니다. df$f

  • 요인으로 변환하려는
  • 서로 다른 수준이 a, b 및 c로 코딩되는 경우
  • 레벨을 치료 A 등으로 표시하려는 경우

factor 함수는 a, b, c 값을 찾아 수치 적 요인 분류로 변환 한 다음 라벨 값을 level요인 속성에 추가합니다 . 이 속성은 내부 숫자 값을 올바른 레이블로 변환하는 데 사용됩니다. 그러나 보시다시피 label속성 이 없습니다 .

> df <- data.frame(v=c(1,2,3),f=c('a','b','c'))    
> attributes(df$f)
$levels
[1] "a" "b" "c"

$class
[1] "factor"

> df$f <- factor(df$f, levels=c('a','b','c'),
+   labels=c('Treatment A: XYZ','Treatment B: YZX','Treatment C: ZYX'))    
> attributes(df$f)
$levels
[1] "Treatment A: XYZ" "Treatment B: YZX" "Treatment C: ZYX"

$class
[1] "factor"

레벨이나 레이블을 참조 할 수있는 "lfactors"패키지를 작성했습니다.

# packages
install.packages("lfactors")
require(lfactors)

flips <- lfactor(c(0,1,1,0,0,1), levels=0:1, labels=c("Tails", "Heads"))
# Tails can now be referred to as, "Tails" or 0
# These two lines return the same result
flips == "Tails"
#[1]  TRUE FALSE FALSE  TRUE  TRUE FALSE
flips == 0 
#[1]  TRUE FALSE FALSE  TRUE  TRUE FALSE

lfactor는 레벨이 레이블과 혼동되지 않도록 숫자 여야합니다.

참고 URL : https://stackoverflow.com/questions/5869539/confusion-between-factor-levels-and-factor-labels

반응형