如何在R中处理电影数据集:将多类型电影转为单一类型
多类型电影的单一类型归类(R语言实现)
假设你的电影数据框为movies,其中genre列存储了多类型标签(格式为逗号分隔字符串或类型列表),以下是两种常见场景的处理方法:
场景1:类型标签为逗号分隔字符串
比如genre列的值为"Drama,Comedy"、"Drama,Adventure,Sci-Fi"这类格式:
- 先加载所需工具包:
library(dplyr) library(stringr)
- 按优先级归类类型:
movies_cleaned <- movies %>% mutate(primary_genre = case_when( # 按优先级顺序判断,优先匹配的类型放在前面 str_detect(genre, "Drama") ~ "Drama", str_detect(genre, "Comedy") ~ "Comedy", str_detect(genre, "Adventure") ~ "Adventure", str_detect(genre, "Sci-Fi") ~ "Sci-Fi", # 可继续添加其他需要优先处理的类型 TRUE ~ genre # 对不匹配上述类型的条目,保留原单一类型;也可改为"Other"统一归类 ))
case_when会按顺序执行判断,只要某条匹配成功就会返回对应类型,因此优先级高的类型要放在前面,比如所有包含Drama的多类型电影都会被优先归类为Drama。
场景2:类型标签为列表格式
如果genre列是列表类型(每个元素是一个包含多个类型的向量),可以用sapply来检查类型是否存在:
movies_cleaned <- movies %>% mutate(primary_genre = case_when( sapply(genre, function(x) "Drama" %in% x) ~ "Drama", sapply(genre, function(x) "Comedy" %in% x) ~ "Comedy", sapply(genre, function(x) "Adventure" %in% x) ~ "Adventure", # 其他类型同理 TRUE ~ sapply(genre, function(x) x[1]) # 默认取列表中的第一个类型,也可改为"Other" ))
你可以根据自己的分析需求调整类型的优先级顺序,确保符合你的归类逻辑。
内容的提问来源于stack exchange,提问作者Adeeb Graissy
相关产品推荐
相关产品推荐

