2013-08-16 3 views
3

주어진 범주를 모든 가능한 그룹화 조합으로 구분하는 더미 변수를 생성하는 방법을 찾고 있습니다. 각 그룹화그룹화 된 더미 변수를 생성하는 방법은 무엇입니까?

Three groups: A/B/C 
Two groups: A&B/C 
Two groups: A&C/B 
Two groups: A/B&C 
One group: A&B&C 

나서 더미 변수는 데이터 프레임의 서로 다른 열 출력과 같다 : 우리는 세 가지 카테고리 (예를 들어 A, B 및 C)가 예를 들어, 다섯 개 가지 그룹이있다. 그래서 내가 원하는 최종 출력은 다음 표와 같습니다

sample_num category grouping1 grouping2 grouping3 grouping4 grouping5 
         A; B; C  A&B; C  A&C; B  A; B&C  A&B&C 
-----------+---------+------------+-----------+-----------+-----------+---------- 
     1   A   1   1   1   1   1 
     2   A   1   1   1   1   1 
     3   A   1   1   1   1   1 
     4   A   1   1   1   1   1 
     5   B   2   1   2   2   1 
     6   B   2   1   2   2   1 
     7   B   2   1   2   2   1 
     8   C   3   2   1   2   1 
     9   C   3   2   1   2   1 
    10   C   3   2   1   2   1 
    11   C   3   2   1   2   1 
    12   C   3   2   1   2   1 
+1

최종 출력이 명확하지 않습니다 - 어떤 카테고리에 들어 있습니까? – thelatemail

+0

질문이 닫힐 수있는 이유 중 하나이기 때문에 패키지 제안을 요청하는 부분을 모두 편집했습니다. 이 기능이 마음에 들지 않으면 변경 사항을 되돌릴 수 있습니다. –

+0

감사합니다. 나는이 사이트가 처음인데 편집을 취소 한 것 같습니다. 그들을 돌려 보내려고하고있어. –

답변

2

(기본적으로로드)를 stats 패키지의 model.matrix 기능은 아니지만 당신이 설명하는 종류의 "더미 변수"를 구성합니다. 첫 번째 인수는 R "공식"입니다 :

>dat <- read.table(text="sample_num category 
+  1   A  
+  2   A  
+  3   A  
+  4   A  
+  5   B  
+  6   B  
+  7   B  
+  8   C  
+  9   C  
+  10   C  
+  11   C  
+  12   C", header=TRUE) 
> model.matrix(~category, data=dat) 

    (Intercept) categoryB categoryC 
1   1   0   0 
2   1   0   0 
3   1   0   0 
4   1   0   0 
5   1   1   0 
6   1   1   0 
7   1   1   0 
8   1   0   1 
9   1   0   1 
10   1   0   1 
11   1   0   1 
12   1   0   1 
attr(,"assign") 
[1] 0 1 1 
attr(,"contrasts") 
attr(,"contrasts")$category 
[1] "contr.treatment" 

I (강하게) 인형의 당신의 네 개의 열 그룹이 회귀 기능에 의해 선형 적으로 의존하고 그 중 하나가 거부 얻을 것입니다해야합니다 생각한다. 다른 대비 주장이 가능합니다. 당신은 공부해야 : 당신이 상호 작용의 다양한 수준의 자동 계산보고 싶을 경우

> model.matrix(~category+0, data=dat, contrasts = list(category = "contr.sum")) 
    categoryA categoryB categoryC 
1   1   0   0 
2   1   0   0 
3   1   0   0 
4   1   0   0 
5   0   1   0 
6   0   1   0 
7   0   1   0 
8   0   0   1 
9   0   0   1 
10   0   0   1 
11   0   0   1 
12   0   0   1 
attr(,"assign") 
[1] 1 1 1 
attr(,"contrasts") 
attr(,"contrasts")$category 
[1] "contr.sum" 

것은 당신이 세 가지 변수보다는 하나가 필요합니다

?model.matrix 
?contrasts 

이없이 절편과 합 - 대조이다 변수 : 세 가지 수준의 변수 :

> dat <- expand.grid(A=letters[1:3], B=letters[4:6], C=letters[7:9]) 
> str(model.matrix(~ A*B*C)) 
Error in str(model.matrix(~A * B * C)) : 
    error in evaluating the argument 'object' in selecting a method for function 'str': Error in model.frame.default(object, data, xlev = xlev) : 
    invalid type (closure) for variable 'C' 
> str(model.matrix(~ A*B*C, data=dat)) 
num [1:27, 1:27] 1 1 1 1 1 1 1 1 1 1 ... 
- attr(*, "dimnames")=List of 2 
    ..$ : chr [1:27] "1" "2" "3" "4" ... 
    ..$ : chr [1:27] "(Intercept)" "Ab" "Ac" "Be" ... 
- attr(*, "assign")= int [1:27] 0 1 1 2 2 3 3 4 4 4 ... 
- attr(*, "contrasts")=List of 3 
    ..$ A: chr "contr.treatment" 
    ..$ B: chr "contr.treatment" 
    ..$ C: chr "contr.treatment" 

model.matrix(~ A*B*C, data=dat) 

omitted output 
+0

감사합니다. 그러나 우리가 3 개 이상의 범주를 갖는다면 어떨까요? A, B, C, D와 같은 네 가지 범주가있는 경우 두 개의 더미 변수가있는 그룹을 가지며 각각 A와 B의 더미 변수 "0"과 " C 및 D 등). –

관련 문제