首页 > 解决方案 > 在应用功能中组合/合并数据框

问题描述

我正在尝试在 mapply 函数中合并/组合数据帧。背景:使用的数据集:带有电影的数据框,有一列称为流派。此列有“|” - 每个电影 ID 的不同类型,例如“恐怖|动作|奇幻”。

我想生成一个数据框,它将每部电影的每个流派 id 存储在一个新行中,这样我就可以为每种流派做静态分析,例如

id  genre
42  Horror
42  Action
42  Fantasy
43  Action

...

在此之后,我可以通过电影 ID 将电影数据帧与这个生成的数据帧连接起来。

这是我正在尝试的:

moviegenres <- data.table(id=integer(), genre=character())


genres <- mapply(function(id, m){
    g <- unlist(str_split(m, "\\|"))
    df <- data.table(id=id, genre=g)
    rbind(df)
},movies$id, movies$genres)

我也尝试使用合并功能。如果我在函数中打印,我可以看到每部电影正确生成的数据表。但运行此代码后,数据表(或数据帧)moviegenres为空......!

谢谢!沃尔夫冈

标签: rmapply

解决方案


我想你是需要的separate_rows

library(tidyverse)

df <- data.table(id = c(1,2), genre = c( "Horror|Action|Fantasy",  "Horror|Action|Fantasy"))

df %>% 
    separate_rows(genre, sep = "\\|")

   id   genre
1:  1  Horror
2:  1  Action
3:  1 Fantasy
4:  2  Horror
5:  2  Action
6:  2 Fantasy

推荐阅读