繁体   English   中英

如何将长期排序的订单数据重塑为宽数据格式

[英]How to reshape long ranked order data into Wide data format

数据摘录取自mlogit软件包(Game2),该软件包的格式很长,可以模仿我的情况。 其中ch是给予平台的等级,而chid是一位受访者的ID

         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

我需要将此长数据转换成如下所示的宽格式。 在mlogit软件包中。 等级保留(从第1列(即ch.Xbox)到第6列(即ch.PC)。

  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

我的问题是保留上面给出的长格式到宽格式作为示例。

我们可以使用dplyrtidyr进行重塑。

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)

如果希望最终输出与所需输出相同,则可以进一步准备列名称的向量,然后根据该列选择列。

# 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

数据

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM