요인 수준과 요인 레이블 간의 혼동
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
'source' 카테고리의 다른 글
스위치 대/소문자: 오류: 대/소문자 레이블이 정수 상수로 줄어들지 않음 (0) | 2023.06.15 |
---|---|
ORA-01658: 테이블스페이스 TS_DATA에서 세그먼트에 대한 INITIAL 익스텐트를 생성할 수 없습니다. (0) | 2023.06.15 |
0이 아닌 비트를 양의 정수로 빠르게 카운트하는 방법 (0) | 2023.06.15 |
R에 로드된 패키지 버전을 확인하는 방법은 무엇입니까? (0) | 2023.06.15 |
10.4.24-MariaDB - 외부 키 구속조건이 잘못 형성됨 (0) | 2023.06.15 |