팩터의 레벨은 범주(category)를 의미합니다. 예를 들면, 성적 등급(A, B, C, D, F), 성별(남, 여), 크기(대, 중, 소)와 같은 범주형(명목형) 변수에서의 범주를 나타냅니다. 이러한 범주 구분을 성격이 다른 임의의 벡터에 일괄 적용할 수는 없습니다. 팩터의 레벨은 벡터의 원소로부터 정의되고요, 따라서 팩터는 벡터로부터 손쉽게 생성할 수 있습니다.
@@kykwahk 답변 감사합니다. 제가 궁금했던건 예를 들어 c(남자, 여자), c(남자), c(여자, 여자), c (남자, 남자, 여자) 이런식으로 같은 레벨들로 구성된 벡터가 여러개 있을 때, 지금 제 지식으로는 매번 factor(vector, levels=c(남자, 여자))이런식으로 각각 벡터에 대해서 팩터화시켜주는걸 벡터의 숫자만큼 적용해야 각 팩터로 만들수가 있는데, 혹시 같은 레벨을 지니는 벡터들이라면 여러 벡터들을 한번에 팩터로 만들어줄 수 있는지가 궁금했습니다. 무료 강의에 질문이 너무 많은것 같은데 소중한 강의 다시 한 번 감사드립니다.
동일한 레벨로 구성된 데이터셋이 다수 있을 경우 한꺼번에 팩터의 레벨을 지정할 수는 있습니다. 예를 들어, 다음과 같이 해볼 수 있습니다. > lst lst [[1]] [1] "남자" "여자" [[2]] [1] "남자" [[3]] [1] "여자" "여자" [[4]] [1] "남자" "남자" "여자" > lapply(lst, function(x) factor(x, levels=c("남자", "여자"))) [[1]] [1] 남자 여자 Levels: 남자 여자 [[2]] [1] 남자 Levels: 남자 여자 [[3]] [1] 여자 여자 Levels: 남자 여자 [[4]] [1] 남자 남자 여자 Levels: 남자 여자 lapply() 함수는 다음 강의를 참고하세요. R 프로그래밍 / R 기초 - 반복 적용 - Apply Family(ruclips.net/video/zuBuRYIk0C4/видео.html)
서열팩터(ordered factor)를 사용하여 통계분석을 해야 하는 경우를 제외하고는 대부분의 경우 팩터의 레벨을 다르게 한다고 해서 분석 결과가 달라지지는 않습니다. 하지만 팩터의 레벨을 다르게 하면 출력의 순서가 달라지기 때문에 데이터 요약이나 시각화를 할 때는 영향을 받습니다. 예를 들어, 다음 코드를 실행해보세요. 금메달, 은메달, 동메달을 집계하는 요약표를 만들면 기본적으로 팩터의 레벨은 알파벳 순서이기 때문에 동메달, 금메달, 은메달 순서로 집계가 됩니다. 막대도표를 그려보면 동일하게 동메달, 금메달, 은메달 순서로 그래프가 생성이 되고요. 순서가 맘에 안들죠... > medals table(medals) medals Bronze Gold Silver 50 20 30 > plot(medals) 이때 다음과 같이 팩터의 레벨을 내가 출력하고 싶은 순서대로 조정하면 조금 더 의미 있는 방식으로 출력할 수 있습니다. 예를 들어, 여기에서는 팩터의 레벨의 순서를 조정하여 금메달, 은메달, 동메달 순서로 메달 집계표와 그래프가 출력되도록 하였습니다. > medals.relevel table(medals.relevel) medals.relevel Gold Silver Bronze 20 30 50 > plot(medals.relevel) forcats 패키지를 사용할 경우에는 이렇게... > library(forcats) > medals.relevel table(medals.relevel) medals.relevel Gold Silver Bronze 20 30 50 > plot(medals.relevel)
이전 강의('R 프로그래밍 / R 기초 - 팩터')는 R을 설치하면 기본적으로 설치되는 base 패키지에서 제공되는 함수를 중심으로 다룬 것입니다. R에서 팩터(factor)를 다루는 기본적인 방법과 함수를 소개합니다. 반면에 이 강의('R 프로그래밍 / R 기초 - 팩터 - forcats')는 팩터를 보다 효과적으로 처리할 수 있는 함수를 제공하는 forcats 패키지를 소개합니다. base 패키지에서 제공하는 함수로도 팩터를 충분히 다룰 수 있습니다만 forcats 패키지의 함수를 사용하면 팩터를 보다 효율적이고 일관된 방식으로 처리할 수 있습니다. 특히 forcats 패키지는 Tidyverse 생태계의 일부이기 때문에 그 생태계에 속한 패키지 및 함수와 함께 사용하면 더욱 효과적입니다. Tidyverse 생태계에 대해서는 다음 재생목록을 참고하세요. R 프로그래밍 / R 기초 - Tidyverse ruclips.net/p/PLY0OaF78qqGCYlttTzLQufH3k9X2okgxo
강의 감사합니다. R 공부 처음 해보는데 하나의 factor에서 만든 level을 다른 vector들에 일괄적으로 적용해서 손쉽게 factor로 만드는건 없는지 궁금하네요
팩터의 레벨은 범주(category)를 의미합니다. 예를 들면, 성적 등급(A, B, C, D, F), 성별(남, 여), 크기(대, 중, 소)와 같은 범주형(명목형) 변수에서의 범주를 나타냅니다. 이러한 범주 구분을 성격이 다른 임의의 벡터에 일괄 적용할 수는 없습니다. 팩터의 레벨은 벡터의 원소로부터 정의되고요, 따라서 팩터는 벡터로부터 손쉽게 생성할 수 있습니다.
@@kykwahk 답변 감사합니다. 제가 궁금했던건 예를 들어 c(남자, 여자), c(남자), c(여자, 여자), c (남자, 남자, 여자) 이런식으로 같은 레벨들로 구성된 벡터가 여러개 있을 때, 지금 제 지식으로는 매번 factor(vector, levels=c(남자, 여자))이런식으로 각각 벡터에 대해서 팩터화시켜주는걸 벡터의 숫자만큼 적용해야 각 팩터로 만들수가 있는데, 혹시 같은 레벨을 지니는 벡터들이라면 여러 벡터들을 한번에 팩터로 만들어줄 수 있는지가 궁금했습니다. 무료 강의에 질문이 너무 많은것 같은데 소중한 강의 다시 한 번 감사드립니다.
동일한 레벨로 구성된 데이터셋이 다수 있을 경우 한꺼번에 팩터의 레벨을 지정할 수는 있습니다. 예를 들어, 다음과 같이 해볼 수 있습니다.
> lst lst
[[1]]
[1] "남자" "여자"
[[2]]
[1] "남자"
[[3]]
[1] "여자" "여자"
[[4]]
[1] "남자" "남자" "여자"
> lapply(lst, function(x) factor(x, levels=c("남자", "여자")))
[[1]]
[1] 남자 여자
Levels: 남자 여자
[[2]]
[1] 남자
Levels: 남자 여자
[[3]]
[1] 여자 여자
Levels: 남자 여자
[[4]]
[1] 남자 남자 여자
Levels: 남자 여자
lapply() 함수는 다음 강의를 참고하세요.
R 프로그래밍 / R 기초 - 반복 적용 - Apply Family(ruclips.net/video/zuBuRYIk0C4/видео.html)
교수님, factor 변수의 level을 다르게 지정하는 게 데이터 분석 시 상이한 결과를 가져오나요? 디폴트 level을 사용하지 않고 굳이 다른 level로 지정하는 이유를 잘 모르겠습니다! 늘 좋은 강의 감사합니다.
서열팩터(ordered factor)를 사용하여 통계분석을 해야 하는 경우를 제외하고는 대부분의 경우 팩터의 레벨을 다르게 한다고 해서 분석 결과가 달라지지는 않습니다.
하지만 팩터의 레벨을 다르게 하면 출력의 순서가 달라지기 때문에 데이터 요약이나 시각화를 할 때는 영향을 받습니다.
예를 들어, 다음 코드를 실행해보세요. 금메달, 은메달, 동메달을 집계하는 요약표를 만들면 기본적으로 팩터의 레벨은 알파벳 순서이기 때문에 동메달, 금메달, 은메달 순서로 집계가 됩니다. 막대도표를 그려보면 동일하게 동메달, 금메달, 은메달 순서로 그래프가 생성이 되고요. 순서가 맘에 안들죠...
> medals table(medals)
medals
Bronze Gold Silver
50 20 30
> plot(medals)
이때 다음과 같이 팩터의 레벨을 내가 출력하고 싶은 순서대로 조정하면 조금 더 의미 있는 방식으로 출력할 수 있습니다. 예를 들어, 여기에서는 팩터의 레벨의 순서를 조정하여 금메달, 은메달, 동메달 순서로 메달 집계표와 그래프가 출력되도록 하였습니다.
> medals.relevel table(medals.relevel)
medals.relevel
Gold Silver Bronze
20 30 50
> plot(medals.relevel)
forcats 패키지를 사용할 경우에는 이렇게...
> library(forcats)
> medals.relevel table(medals.relevel)
medals.relevel
Gold Silver Bronze
20 30 50
> plot(medals.relevel)
안녕하세요 교수님 질문이 생겨 글 남깁니다. library(forcats)를 실행했을 때
Error in library(forcats) : there is no package called ‘forcats’ 에러가 뜹니다.
어떻게 해결해야 하나요?
R 설치 시 제공되는 표준패키지 이외의 새로운 패키지는 처음 사용하기 전에 먼저 설치해야 합니다.
안녕하세요 교수님 강의 잘 보고 있습니다.
다름이 아니라, forcats를 깔았는데 fct_inorder 함수가 뜨질 않네요... 어떤 게 잘못된 걸까요? ㅠㅠ
패키지를 설치한 후에 사용하기 위해서는 library() 함수로 메모리에 적재해야 합니다.
> food library(forcats)
> fct_inorder(food)
[1] Vegetables Fruits Vegetables Grains Fruits
[6] Vegetables Dairy Fruits Proteins Fruits
Levels: Vegetables Fruits Grains Dairy Proteins
교수님 이 강의는 이전 강의랑 어떤 점이 차이가 나는지 알려주시면 감사드립니다!
이전 강의('R 프로그래밍 / R 기초 - 팩터')는 R을 설치하면 기본적으로 설치되는 base 패키지에서 제공되는 함수를 중심으로 다룬 것입니다. R에서 팩터(factor)를 다루는 기본적인 방법과 함수를 소개합니다. 반면에 이 강의('R 프로그래밍 / R 기초 - 팩터 - forcats')는 팩터를 보다 효과적으로 처리할 수 있는 함수를 제공하는 forcats 패키지를 소개합니다.
base 패키지에서 제공하는 함수로도 팩터를 충분히 다룰 수 있습니다만 forcats 패키지의 함수를 사용하면 팩터를 보다 효율적이고 일관된 방식으로 처리할 수 있습니다. 특히 forcats 패키지는 Tidyverse 생태계의 일부이기 때문에 그 생태계에 속한 패키지 및 함수와 함께 사용하면 더욱 효과적입니다. Tidyverse 생태계에 대해서는 다음 재생목록을 참고하세요.
R 프로그래밍 / R 기초 - Tidyverse
ruclips.net/p/PLY0OaF78qqGCYlttTzLQufH3k9X2okgxo