R语言合并不同行数table至data.frame报错问题求助
解决电影工作人员数量统计合并报错问题
问题核心:单独统计导演、编剧数量时,table()仅保留存在对应角色的电影ID,导致两个结果的ID集合不一致,直接合并会因行数不匹配报错。
方案一:基础R原生实现
先将两个统计结果转为带明确列名的data.frame,通过全连接保留所有电影ID,最后把缺失值补为0:
# 转换导演统计结果并命名列 dir_df <- as.data.frame(table(imdb.players[imdb.players$role == "Director",]$id)) colnames(dir_df) <- c("movie_id", "num_directors") # 转换编剧统计结果并命名列 writer_df <- as.data.frame(table(imdb.players[imdb.players$role == "Writer",]$id)) colnames(writer_df) <- c("movie_id", "num_writers") # 全连接两个数据集,保留所有电影ID numall.df <- merge(dir_df, writer_df, by = "movie_id", all = TRUE) # 将缺失值替换为0(代表该电影无对应角色的工作人员) numall.df[is.na(numall.df)] <- 0
方案二:dplyr+tidyr简化实现
用tidyverse工具链直接从原始数据分组统计,一步生成完整结果,自动补全缺失值:
library(dplyr) library(tidyr) numall.df <- imdb.players %>% filter(role %in% c("Director", "Writer")) %>% group_by(id, role) %>% summarise(count = n(), .groups = "drop") %>% pivot_wider( names_from = role, values_from = count, values_fill = 0 # 缺失的角色数量自动补0 ) %>% rename(movie_id = id, num_directors = Director, num_writers = Writer)
内容的提问来源于stack exchange,提问作者user1986315
相关产品推荐
相关产品推荐

