source

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

manycodes 2023. 6. 15. 21:58
반응형

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

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()기능.요인에는 다음 값만 있습니다.level성속, 이에의설로 설정됩니다.labels의쟁논의 factor()SPSS와 스러울 수 .이는 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 등의 레이블을 지정할 수 있습니다.

는 a,b을 인자 함 수 a, b c 를 아 인 클 로 고 하 블 값 추 다 합 가 니 에 다 음 을 레 이 값 변 는 숫 스 환 자 및 자 찾 래 ▁the ▁values ▁to ▁the ▁label ▁the ▁will ▁look ▁a , ▁factor , ▁c , ▁add ▁and ▁convert ▁function 인 ▁factor ▁them ▁classes ▁and 다 자 함 ▁values 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

모든 요인에는 레이블과 혼동되지 않도록 수준이 숫자여야 합니다.

스크립팅 및 예쁜 인쇄를 위해 요인 변수 수준에 다른 이름을 사용하는 이 문제를 처리하는 데 일반적으로 사용하는 기술을 공유하고자 합니다.

# Load packages
library(tidyverse)
library(sjlabelled)
library(patchwork)

# Create data frames
df <- data.frame(v = c(1, 2, 3), f = c("a", "b", "c"))
df_labelled <- data.frame(v = c(1, 2, 3), f = c("a", "b", "c")) %>%
  val_labels(
    # levels are characters
    f = c(
      "a" = "Treatment A: XYZ", "b" = "Treatment B: YZX", 
      "c" = "Treatment C: ZYX"
    ), 
    # levels are numeric
    v = c("1" = "Exp. Unit 1", "2" = "Exp. Unit 2", "3" = "Exp. Unit 3")
  )

# df and df_labelled appear exactly the same when printed and nothing changes
# in terms of scripting
df
#>   v f
#> 1 1 a
#> 2 2 b
#> 3 3 c
df_labelled
#>   v f
#> 1 1 a
#> 2 2 b
#> 3 3 c

# Now, let's take a look at the structure of df and df_labelled
str(df)
#> 'data.frame':    3 obs. of  2 variables:
#>  $ v: num  1 2 3
#>  $ f: chr  "a" "b" "c"
str(df_labelled) # notice the attributes
#> 'data.frame':    3 obs. of  2 variables:
#>  $ v: num  1 2 3
#>   ..- attr(*, "labels")= Named num [1:3] 1 2 3
#>   .. ..- attr(*, "names")= chr [1:3] "Exp. Unit 1" "Exp. Unit 2" "Exp. Unit 3"
#>  $ f: chr  "a" "b" "c"
#>   ..- attr(*, "labels")= Named chr [1:3] "a" "b" "c"
#>   .. ..- attr(*, "names")= chr [1:3] "Treatment A: XYZ" "Treatment B: YZX" "Treatment C: ZYX"

# Lastly, create ggplots with and without pretty names for factor levels
p1 <- df_labelled %>% # or, df
  ggplot(aes(x = f, y = v)) + 
  geom_point() + 
  labs(x = "Treatment", y = "Measurement")
p2 <- df_labelled %>%
  ggplot(aes(x = to_label(f), y = to_label(v))) + 
  geom_point() + 
  labs(x = "Treatment", y = "Experimental Unit")

p1 / p2

2021-08-17 reprex 패키지에 의해 생성됨 (v2.0.0)

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

반응형