2017-10-08 12 views
0

데이터 조각은 내 상태를 모방 한 긴 형식의 mlogit 패키지 (Game2)에서 가져옵니다. 여기서 채널은 플랫폼에 주어진 순위이며, CHID 한 응답자 I는 다음과 같이 다양한 형태로이 긴 데이터를 변환 할 필요가긴 순위의 주문 데이터를 Wide 데이터 형식으로 재구성하는 방법

  age  hours  platform  ch  own  chid 
1  33  2.00  GameBoy  6  0  1   
2  33  2.00  GameCube  5  0  1 
3  33  2.00  PC    4  1  1 
4  33  2.00  PlayStation 1  1  1 
5  33  2.00  PSPortable  3  0  1 
6  33  2.00  Xbox   2  0  1   
7  19  3.25  GameBoy  6  0  2 
8  19  3.25  GameCube  5  0  2 
9  19  3.25  PC    1  1  2 
10  19  3.25   PlayStation 2  1  2 
11  19  3.25   PSPortable  3  0  2 
12  19  3.25   Xbox   4  0  2   
13  18  4.00   GameBoy  6  0  3   
14  18  4.00   GameCube  4  0  3 
15  18  4.00   PC    5  1  3   
16  18  4.00   PlayStation 1  1  3 
17  18  4.00   PSPortable  2  0  3 
18  18  4.00   Xbox   3  0  3 

의 ID입니다. mlogit 패키지에 있습니다. 랭크 6 열 (즉 ch.PC) 컬럼 1 (즉. ch.Xbox)에서 (유지된다.

ch.Xbox ch.PlayStation ch.PSPortable ch.GameCube ch.GameBoy ch.PC own.Xbox own.PlayStation own.PSPortable own.GameCube own.GameBoy own.PC age hours 
1 2  1    3    5   6   4  0  1    0    0   0   1  33 2.00 
2 4  2    3    5   6   1  0  1    0    0   0   1  19 3.25 
3 3  1    2    4   6   5  0  1    0    0   0   1  18 4.00 

질문은 예를 들어 위에서 주어진 와이드 포맷으로 긴 형태를 유지한다.

+1

가능 중복 [dcast에서 value.var가리스트이거나 여러 값을 변수를 가질 수? (https://stackoverflow.com/questions/23056328/can -d-value-a-value-d-a-list-or-have-multiple-value-variables) –

답변

2

우리는 당신이 최종 출력이 원하는 출력과 동일 할 경우 더 열 이름의 벡터를 준비 할 수 있습니다. 모양 변경을 수행 할 수

library(dplyr) 
library(tidyr) 

# Reshape the data  
dt2 <- dt %>% 
    gather(type, value, ch, own) %>% 
    unite("platform_type", type, platform, sep = ".") %>% 
    spread(platform_type, value) %>% 
    arrange(chid) 

dplyrtidyr를 사용하고 기반으로 열을 선택할 수 있습니다 그것.

,
# Prepare the column vector 
vec <- c("Xbox", "PlayStation", "PSPortable", "GameCube", "GameBoy", "PC") 
colname <- unlist(lapply(c("ch.", "own."), function(x) paste0(x, vec))) 
colname2 <- c(colname, "age", "hours") 

# Select columns 
dt3 <- dt2 %>% select(colname2) 

# View the result 
ch.Xbox ch.PlayStation ch.PSPortable ch.GameCube ch.GameBoy ch.PC own.Xbox own.PlayStation own.PSPortable own.GameCube own.GameBoy own.PC age hours 
1  2    1    3   5   6  4  0    1    0   0   0  1 33 2.00 
2  4    2    3   5   6  1  0    1    0   0   0  1 19 3.25 
3  3    1    2   4   6  5  0    1    0   0   0  1 18 4.00 

DATA

dt <- read.table(text = "   age  hours  platform  ch  own  chid 
1  33  2.00  GameBoy  6  0  1   
       2  33  2.00  GameCube  5  0  1 
       3  33  2.00  PC    4  1  1 
       4  33  2.00  PlayStation 1  1  1 
       5  33  2.00  PSPortable  3  0  1 
       6  33  2.00  Xbox   2  0  1   
       7  19  3.25  GameBoy  6  0  2 
       8  19  3.25  GameCube  5  0  2 
       9  19  3.25  PC    1  1  2 
       10  19  3.25   PlayStation 2  1  2 
       11  19  3.25   PSPortable  3  0  2 
       12  19  3.25   Xbox   4  0  2   
       13  18  4.00   GameBoy  6  0  3   
       14  18  4.00   GameCube  4  0  3 
       15  18  4.00   PC    5  1  3   
       16  18  4.00   PlayStation 1  1  3 
       17  18  4.00   PSPortable  2  0  3 
       18  18  4.00   Xbox   3  0  3", 
       header = TRUE, stringsAsFactors = FALSE)