如何将单个列中记录的类别转换为每个类别的多个列

时间:2015-12-02 02:57:16

标签: r

说我有这样的表

year  genre
1992  comedy
2012  comedy
2007  drama
1998  drama
2005  drama
2001  romance
2013  documentary
...   ....

如何将其更改为此类

comedy drama romance documentary
1992   2007   2001      2013
2012   1998   ...       ...
...    ...    ...        
...           ...
              ...

每种类型的年份结果长度不同

3 个答案:

答案 0 :(得分:3)

对于不平衡的群体(不同的长度),我认为你最好得到一个列表,其中每个项目是相应类型的年份向量。使用split

可以轻松完成
genre_list = split(your_data$year, your_data$genre)

答案 1 :(得分:0)

尝试:

library(dplyr)
library(tidyr)
dat %>% group_by(genre) %>%
        mutate(num = row_number()) %>%
        spread(genre, year)

Source: local data frame [3 x 5]

    num comedy documentary drama romance
  (int)  (int)       (int) (int)   (int)
1     1   1992        2013  2007    2001
2     2   2012          NA  1998      NA
3     3     NA          NA  2005      NA

答案 2 :(得分:0)

或者我们可以使用data.table

library(data.table)
dcast(setDT(dat)[, num:= seq_len(.N), genre], num~genre, value.var='year')