在应用函数中组合/合并数据帧
Combining / Merging data frames in apply function
我正在尝试在 mapply 函数中合并/组合数据帧。背景:
使用的数据集:有电影的数据框,有一列叫做genres。此列有“|” - 为每个电影 ID 分离流派,例如"Horror|Action|Fantasy".
我想生成一个数据框,将每部电影的每个流派 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)
我也用合并函数试过了。如果我在函数中打印,我可以看到每部电影的正确生成数据 tables。但是在运行这段代码之后数据table(或数据框)moviegenres是空的...!
谢谢!
沃尔夫冈
我觉得你很需要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
我正在尝试在 mapply 函数中合并/组合数据帧。背景: 使用的数据集:有电影的数据框,有一列叫做genres。此列有“|” - 为每个电影 ID 分离流派,例如"Horror|Action|Fantasy".
我想生成一个数据框,将每部电影的每个流派 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)
我也用合并函数试过了。如果我在函数中打印,我可以看到每部电影的正确生成数据 tables。但是在运行这段代码之后数据table(或数据框)moviegenres是空的...!
谢谢! 沃尔夫冈
我觉得你很需要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