R:如何将字符串拆分为值并将生成的碎片作为列映射到数据集?

时间:2017-03-06 02:03:24

标签: r reshape tidyr melt

enter image description here

如上图所示,我有一个专栏,类型,以及相应电影所属的类型列表。共有19种独特的流派。我想知道我是否可以操纵这些数据,将19列添加到每个对应于每个类型标识符的数据集中,并将相应的单元格标记为0或1,表示电影隶属于每个类型列。

看起来应该如下图所示。

enter image description here

1 个答案:

答案 0 :(得分:2)

我们可以在分割'genres'列

后执行此操作
library(qdapTools)
d1 <- mtabulate(strsplit(as.character(df1$genres),","))
row.names(d1) <- sub("\\s*\\(.*", "", df1$title)

或者另一种选择是创建一个列名为'genres'的矩阵,然后对分割的字符串进行比较

m1 <- matrix(0, dimnames = list(sub("\\s*\\(.*", "", df1$title), 
      c("Adventure", "Animation", "Children",
   "Comedy", "Fantasy", "Romance", "Action", "Crime", "Thriller")), ncol=9, nrow = nrow(df1))
m1 + (t(sapply(strsplit(as.character(df1$genres), ","), function(x) colnames(m1) %in% x)))
#         Adventure Animation Children Comedy Fantasy Romance Action Crime Thriller
#Toy Story         1         1        1      1       1       0      0     0        0
#Jumanji           1         0        1      0       1       0      0     0        0
#Heat              0         0        0      0       0       0      1     1        1